现在他们正在弃用他们的 OpenID2 提供程序,因此与 Google 进行 OpenID Connect 委托?

Posted

技术标签:

【中文标题】现在他们正在弃用他们的 OpenID2 提供程序,因此与 Google 进行 OpenID Connect 委托?【英文标题】:OpenID Connect delegation with Google now that they are deprecating their OpenID2 provider? 【发布时间】:2015-03-12 18:14:26 【问题描述】:

多年来,我一直使用 OpenID 委托登录 Stack Overflow(以及其他站点),使用我自己的 URI 作为 OpenID,但让 Google 处理身份验证。我使用this Stack Overflow question 中描述的技术;因此,我的自定义 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 日停用。Learn more。” This page 解释说 Google 已弃用 OpenID 2.0,开发人员应将其应用迁移到 OpenID Connect。

我能否继续使用自定义 URI 进行 OpenID 登录,但委托给 Google 的 OpenID Connect 提供商进行身份验证?怎么样?

【问题讨论】:

【参考方案1】:

OpenID Connect支持发现,旨在根据您提供的一些提示(电子邮件、帐户、URL、域等)找到您的提供商;它不会为您提供一个持久标识符,您可以将其委派身份验证给您选择的可配置提供程序。

因此,如果您只想使用自定义 URI 来查找您的提供程序,您可以使用 Nat 提供的方法(除了 Google 没有也不能做的最后一点,并假设 SO 支持 Discovery)。

但是,如果您想要真正的委托,以便 RP 可以使用 OP 返回的标识符,该标识符在您委托给的不同 OP 上是持久的,那么您不能。

对于 ***,您可能不需要其中任何一个:SO 使用其自己的主要标识符/帐户,您可以将多个帐户链接到该帐户,包括 Google 的。只有当 SO 使用您的自定义 URI 作为其主要标识符时,您才会遇到问题。在这种情况下没有问题,您可以:

    使用 Google 登录按钮,或 在 OpenID URL 输入框中键入您的自定义 URI,假设您已经实现了 Discovery

但是 1. 和 2. 确实产生了相同的结果:他们发现 Google 就是您要进行身份验证的地方。

【讨论】:

这可能值得自己提出一个问题。我想 Robert 设置委托的原因与我所做的大致相同:因为我希望能够更换身份验证提供程序,而不必访问使用自定义 URI 作为用户标识符的所有单个站点。 Stack Overflow/Exchange 是少数几个认为 SO/SE 用户可能具有多个身份的站点之一,而其他站点则根本没有。如果所做的只是再次将我与 Google 联系起来,我不想设置新的东西。如果我切换身份验证提供商,如果其他人放弃 OpenID 2.0,我是否只是推迟了不可避免的事情?【参考方案2】:

假设您想使用自己的域作为用户提供的登录标识符 --

    转到 https://***.com/users/login-add?returnUrl=%2Fusers%2Fcurrent 并使用 Google 添加登录信息。这会将 Google OpenID Connect 标识符添加到您的帐户。 在您的域中托管 OpenID Connect 发现文档(有关详细信息,请参阅 http://openid.net/specs/openid-connect-discovery-1_0.html#URLSyntax。) 等到 *** 开始支持 OpenID Connect 发现 使用http://tupelo-schneck.org/robert作为用户标识符

此外,如果 *** 支持 OpenID Connect Migration 1.0,并假设 Google 在 Migration 响应中返回您的自定义域 claim_id,那么:

    在您的域中托管 JSON 文档,如 http://openid.net/specs/openid-connect-migration-1_0.html#VerifyOPAuthority 中所述。

会让你顺利。

【讨论】:

我不认为谷歌可以支持返回自定义域claimed_id,因为他们没有存储它并且它没有被传入。这意味着不支持真正的委派,但这是有限的(假设 SO 开始支持发现)只是通过自定义域名/名称进行发现。主要标识符将成为 Google 特定的 ID,这很可能会破坏发布者的目标。 是的...否则,您始终可以使用我的开源项目(例如 bitbucket.org/PEOFIAMP/phpoidc :-) 来设置自己的 IdP :-) 谢谢!我对the discovery spec 的解读是我需要使用HTTPS。这对我来说没问题。唯一的障碍是 Stack Overflow 是否以及何时支持 OpenID Connect 发现。有人知道吗?最后,看起来我不需要迁移,因为相同的标识符(或无论如何是 HTTPS 版本)将继续工作。有cmets吗? 实际上,也许是@HansZ。是说这行不通。换句话说,OpenID Connect 发现与 OpenID2 委托中的“Claimed Identifier”与“OP-Local Identifier”没有任何类比。我可以让tupelo-schneck.org/robert 声称 Google 是该标识符的“发布者”,但由于 Google 不知道或不关心该标识符,它实际上不会有任何好处。对吗? 确实是后者:如果 SO 实现了 Discovery 并且您在您的域上实现了 Discover (webfinger) 片段,那么您将能够使用您的 URL 进行登录,但 SO 仍会看到 Google 标识符;另一种选择是,只需点击大的“使用 Google 帐户登录”按钮即可为 SO 和您节省麻烦......【参考方案3】:

将您的 OpenID 提供商从 Google 切换到 Yahoo!在您的网站上可能对您有用,直到 Yahoo!停止其 OpenID 2.0 功能。

但是,如果您同意 Nat 的第 1 条建议,那将是更长时间的更稳定的方式。

【讨论】:

以上是关于现在他们正在弃用他们的 OpenID2 提供程序,因此与 Google 进行 OpenID Connect 委托?的主要内容,如果未能解决你的问题,请参考以下文章

Instagram 登录会完全弃用吗?

如果 Facebook Feed 对话框已弃用,您如何在 Facebook 上分享帖子?

一个应用程序中的两个独立地图提供程序

如何在 asp.net mvc4 中将 OpenID 迁移到 OAuth

HttpEntity 现在在 Android 上已被弃用,还有啥替代方案?

Iphone - 不推荐使用的功能......他们会让iphone崩溃吗?