现在谷歌已经停用了OpenID2提供程序,如何使用OpenID Connect委派与谷歌进行集成?

31
多年来,我一直使用OpenID委派通过自己的URI作为OpenID登录Stack Overflow(以及其他网站),但让谷歌处理身份验证。我使用了这个Stack Overflow问题中描述的技术;因此,我的自定义OpenID http://tupelo-schneck.org/robert 解析为一个包含以下内容的HTML页面:
<link href="https://www.google.com/accounts/o8/ud" rel="openid2.provider" />
<link href="https://www.google.com/profiles/schneck" rel="openid2.local_id" />  

然而,现在我已经登录了Stack Overflow并且Google告诉我"重要通知:Google帐户的OpenID2将于2015年4月20日停用。了解更多。" 此页面解释了Google已经弃用了OpenID 2.0,开发人员应该将其应用迁移到OpenID Connect。

我能否继续使用自定义URI进行OpenID登录,但委托给Google的OpenID Connect提供程序进行身份验证?如何操作?

3个回答

9
OpenID Connect仅支持发现功能,该功能旨在基于某些提示(电子邮件、帐户、URL、域等)找到您的提供者;它不会为您提供一个持久标识符,您可以将身份验证委派给可配置的提供者。
因此,如果您只想使用自定义URI查找提供程序,则可以使用Nat提供的方法(除了Google无法执行最后一步,假设SO支持Discovery)。
但是,如果您想要真正的委派,以便RPs可以使用由OP返回的标识符,在您委派给不同的OP时保持持久性,则无法实现。
对于StackOverflow,您可能不需要这两个中的任何一个:SO使用自己的主要标识符/帐户,并且您可以将多个帐户链接到其中,包括Google的帐户。只有当SO将您的自定义URI用作其主要标识符时,您才会遇到问题。在这种情况下,没有问题,您可以:
1.使用Google登录按钮;或者 2.在OpenID URL输入框中键入您的自定义URI,假设您和SO都已实施了Discovery。
但是,1和2实际上产生相同的结果:它们发现您想要进行身份验证的地方是Google。

2
这可能值得单独提出一个问题。我想罗伯特设置委托的原因与我相同:因为我想能够在不必去所有使用自定义URI作为用户标识符的个别站点的情况下更换身份验证提供程序。Stack Overflow/Exchange是少数几个具有SO/SE用户可能具有多个身份的概念的网站之一,其他网站则没有。如果我切换身份验证提供程序,那么如果其他人放弃OpenID 2.0,我是否只是推迟了不可避免的结果? - MrCranky

6
假设您想使用自己的域名作为用户提供的登录标识符 -
  1. 转到https://stackoverflow.com/users/login-add?returnUrl=%2Fusers%2Fcurrent,并添加使用Google登录。这将向您的帐户添加Google OpenID Connect标识符。
  2. 在您的域上托管OpenID Connect发现文档(有关详细信息,请参见http://openid.net/specs/openid-connect-discovery-1_0.html#URLSyntax)。
  3. 等待StackOverflow开始支持OpenID Connect发现
  4. http://tupelo-schneck.org/robert用作用户标识符
此外,如果StackOverflow支持OpenID Connect Migration 1.0,并且假设Google在迁移响应中返回您的自定义域claimed_id,则:
  1. 按照http://openid.net/specs/openid-connect-migration-1_0.html#VerifyOPAuthority中所述,在您的域中托管JSON文档。
可以使您的过程更加顺畅。

1
我认为谷歌无法支持返回自定义域“claimed_id”,因为他们没有存储它,也没有传递它。这意味着真正的委托不受支持,但这仅限于通过自定义域/名称进行发现(假设SO开始支持发现)。主要标识符将成为谷歌特定的ID,这很可能会破坏发布者的目标。 - Hans Z.
是的...否则,你可以使用我的开源项目 https://bitbucket.org/PEOFIAMP/phpoidc 来设置自己的IdP :-) - Nat Sakimura
谢谢!我阅读了发现规范,我需要使用HTTPS。这对我来说没问题。唯一的障碍是Stack Overflow何时支持OpenID Connect发现。有人知道吗?最后,看起来我不需要迁移,因为相同的标识符(或者至少是HTTPS版本)将继续工作。有什么评论吗? - Robert Tupelo-Schneck
实际上,也许@HansZ. 正在说这行不通。换句话说,OpenID Connect发现过程中没有OpenID2委派中“声明的标识符”与“OP-本地标识符”的类比。我可以让https://tupelo-schneck.org/robert声称Google是该标识符的“发行者”,但由于Google不知道或关心该标识符,因此实际上没有任何好处。是这样吗? - Robert Tupelo-Schneck
还是@HansZ.的意思是说,我将能够成功使用https://tupelo-schneck.org/robert登录,但Stack Overflow会认为我实际上是https://something.google.something?这可能已经足够了... - Robert Tupelo-Schneck
1
事实上,如果SO实现了Discovery并且您在您的域上实现了Discover(webfinger)部分,则您将能够使用您的URL进行登录,但SO仍将看到Google标识符;另一种选择是只需点击大型“使用Google帐户登录”按钮,这样可以为SO和您节省麻烦... - Hans Z.

-4

如果您在网站上将OpenID提供商从Google切换到Yahoo!可能适合您,直到Yahoo!停止其OpenID 2.0功能。

然而,如果您接受Nat的第一个建议,这将是更稳定的方式,可以更长时间地使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接