2012-12-19 51 views
4

有没有人有关于如何做到这一点的线索?我基本上试图用OpenID替换“与Google连接”的策略。当用户使用新的OAuth方案登录时,需要确定一个旧用户(Google开放ID用户)。设计:将Google Open ID迁移到Google OAuth

我有一个依赖电子邮件地址作为主键的工作实现,因为开放式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

+1

也许[此链接](http://andrewhorsman.net/ruby-oauth-google-calendar-data/)和Will Norris的答案会帮助你。如果你确实能够实现它的功能,如果你以后可以在这里发布你的解决方案,那将是非常棒的。我真的很感激它。 – Ashitaka

回答

3

谷歌使用directed identifiers了对OpenID是每个依赖方独特,被明确设计为隐藏用户的任何可相关性标识。所以简短的回答是,没有办法获得与给定Google OpenID相对应的Google ID。

但是,一种选择可能是使用Google的OpenID+OAuth Hybrid流。这使您可以将OAuth令牌作为普通OpenID流的一部分,然后可以使用它从OAuth2 Login API获取用户ID,然后您可以将其与其现有帐户相关联。为所有现有用户完成此操作后,请切换为直接使用OAuth2登录。

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

+0

感谢您的详细解答。这里面临的挑战是我想为每个人(新的和现有的)展示一个Connect with Google,因此OpenID + OAuth流程不会成为我想要新用户浏览的内容。幸运的是,到目前为止,还没有很多用户通过Google Open ID进行连接,因此我可能只需为它们制作一个自定义迁移流程并将其链接发送给它们。 – mahemoff

4

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

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

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

此外,我们正在添加对OpenIDConnect的支持,并且它支持login_hint参数,因此您需要将[email protected]添加到您的授权URL中,并且会将批准引导至正确的帐户。这现在没有记录,但它可能对你有用。用户的浏览器可以通过多个帐户登录到Google,并且您想尝试找到合适的帐户。始终检查您从OAuth2流程中获得的电子邮件,确保它匹配,因为这只是一个“提示”。

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

+0

谢谢大卫。我可以通过询问电子邮件来完成这项工作,但我试图避免要求。 – mahemoff

+0

但这很危险,因为它允许用户在过去的用户的电子邮件地址下生成一个Google帐户,然后登录。 – Doug