4

有没有人知道如何做到这一点?我基本上是在尝试将“与 Google 连接”的策略从 OpenID 替换为 OAuth。当用户在新的 OAuth 方案下登录时,挑战是识别旧用户(Google 开放 ID 上的用户)。

我有一个有效的实现,它依赖于电子邮件地址作为主键,因为开放 ID 策略捕获了这一点。问题是,我不想在 OAuth 流程中询问电子邮件。理想值只是 Google 用户 ID,但 Open ID 策略似乎没有捕捉到这一点。

所以我有开放的 ID 令牌,例如https://www.google.com/accounts/o8/id?id=AfSCwGQ4PUaidXSQddJugXKLqU5V0MrXFhJM6UHybPw并试图了解我是否可以从中获得 Google ID。

更新:我在这里解释了我最终是如何进行此迁移的 - http://softwareas.com/migrating-user-accounts-from-google-openid-to-google-oauth-to-google-plus

4

2 回答 2

4

我们今天没有准备好避免用户看到另一个批准页面的策略。

但是,与其尝试执行基于 OAuth1 的混合流程并且必须将所有遗留代码添加到您的服务器,我建议您简单地关联电子邮件地址并转到 OAuth2 登录。我假设您就像大多数最终要求提供电子邮件地址的网站一样,因为他们通常希望它用于帐户恢复。只需确保您从 OpenId 获取电子邮件地址作为签名参数之一。

然后使用 userinfo.email 范围和 OAuth2 https://developers.google.com/accounts/docs/OAuth2Login,您应该能够以较少的开发人员痛苦进行迁移。

此外,我们正在添加对 OpenIDConnect 的支持,它支持 login_hint 参数,因此您可以将 &login_hint=bob@gmail.com 添加到您的授权 URL,它将引导批准到正确的帐户。这现在没有记录,但它可能对您有用。用户的浏览器可以使用多个帐户登录到 Google,并且您想尝试获得正确的一个。始终检查您从 OAuth2 流程收到的电子邮件以确保它匹配,因为这只是一个“提示”。

用户仍需重新授权 OAuth2,但我们计划在未来跳过此重新授权。重点是计划使用 OAuth2,我们希望尽快提供无缝迁移,并且您将使用受支持的协议。

于 2012-12-20T20:25:47.983 回答
3

Google 使用OpenID 的定向标识符,每个依赖方都是唯一的,并且明确设计为隐藏用户的任何相关标识符。所以简短的回答是,没有办法获得与给定的 Google OpenID 对应的 Google ID。

但是,一种选择可能是使用 Google 的OpenID+OAuth 混合流程。这允许您获取 OAuth 令牌作为正常 OpenID 流的一部分,然后可以使用该令牌从OAuth2 登录API 获取用户 ID,然后您可以将其与他们现有的帐户相关联。为所有现有用户完成此操作后,然后切换到直接使用 OAuth2 登录。

当然,这种方法的诀窍是让您的所有用户再次登录,以便您可以通过新流程发送他们。这将归结为您愿意等待迁移帐户的时间,以及您是否愿意通过向现有用户发送电子邮件并要求他们再次登录来刺激他们(类似于强制密码重置)。

于 2012-12-19T16:27:10.927 回答