有没有人有关于如何做到这一点的线索?我基本上试图将OpenID中的“与Google连接”策略替换为OAuth。当用户在新的OAuth计划下登录时,挑战在于识别旧用户(Google开放ID上的用户)。
我有一个工作实现,它依赖于电子邮件地址作为主键,因为开放ID策略捕获了这一点。问题是,我不想在OAuth流程中要求提供电子邮件。理想的价值只是Google用户ID,但Open ID策略似乎无法捕捉到它。
所以我有https://www.google.com/accounts/o8/id?id=AfSCwGQ4PUaidXSQddJugXKLqU5V0MrXFhJM6UHybPw这样的开放式ID令牌,并尝试了解我是否可以从中获取Google ID。
更新:我在这里解释了我最终如何进行迁移 - http://softwareas.com/migrating-user-accounts-from-google-openid-to-google-oauth-to-google-plus
答案 0 :(得分:4)
我们今天没有准备好可以避免用户看到另一个审批页面的策略。
但是,我建议您只关联电子邮件地址并转到OAuth2登录,而不是尝试执行基于OAuth1的混合流并且必须将所有遗留代码添加到您的服务器。我假设你像大多数网站最终要求电子邮件地址,因为他们通常希望它用于帐户恢复。只需确保从OpenId获取电子邮件地址作为签名参数之一。
然后使用userinfo.email范围和OAuth2 https://developers.google.com/accounts/docs/OAuth2Login,您应该能够以更少的开发人员痛苦进行迁移。
此外,我们正在添加对OpenIDConnect的支持,并且它支持login_hint的参数,因此您需要将& login_hint=bob@gmail.com添加到您的授权网址,它将引导您的批准正确的帐户。现在没有记录,但它可能对您有用。用户的浏览器可能会使用多个帐户登录到Google,您希望尝试使用正确的帐户。请务必查看您从OAuth2流程中收到的电子邮件,以确保其匹配,因为这只是一个“提示”。
用户仍需要重新授权OAuth2,但我们计划在将来跳过此重新授权。重点是计划使用OAuth2,我们希望尽快提供无缝迁移,您将获得支持的协议。
答案 1 :(得分:3)
Google将directed identifiers用于OpenID,每个依赖方都是唯一的,并明确设计为隐藏用户的任何相关标识符。所以简短的回答是,没有办法获得与给定的Google OpenID相对应的Google ID。
但是,一种选择可能是使用Google的OpenID+OAuth Hybrid流程。这允许您将OAuth令牌作为普通OpenID流的一部分获取,然后可以使用OAuth2 Login API获取用户的ID,然后您可以将其与现有帐户相关联。完成所有现有用户的操作后,请直接切换到使用OAuth2登录。
当然,使用这种方法的技巧是让所有用户再次登录,以便您可以通过新流程发送它们。这将归结为您愿意等待多长时间迁移帐户,以及您是否愿意通过向他们发送电子邮件并要求他们再次登录来刺激现有用户(类似于强制密码重置)。