0

作为对 OpenID/OpenAuth 的一些研究的一部分,我刚刚(重新)阅读了 Rob Conery 的 2010 年博客文章OpenID is a Nightmare 。理想情况下,我希望使用链接到单个帐户的多个 OAuth 提供程序,以提供对提供程序不可用的弹性 - 使用 Facebook 登录,链接您的 Twitter 和 Google 帐户,如果您下次访问 Facebook 登录不起作用没关系,您可以使用 Twitter 或 Google 进入并访问您的资料 - 就像在现实世界中,您可以使用护照开一个银行账户,如果您的护照没有,您可以稍后使用您的驾驶执照取款可用的。

Rob 在他的文章中主要担心的一个问题是,无法始终如一地识别正在使用 OpenID 的用户 - 有人可能有一天登录 Google,购买产品,然后几天后回来登录 Google,但无法访问他们购买的产品,因为没有唯一标识符可以保证在两次 Google 身份验证调用之间保持一致。

我很好奇 OAuth 2.0 中是否已经解决了这个问题——要么通过协议规范明确解决,要么通过主要提供商之间的一些实现共识。我可以依靠哪个字段(如果有)在用户与特定 OAuth 提供者的关系的整个生命周期内不进行更改?

4

2 回答 2

2

作为登录过程的 OAuth2 的一部分,Google 提供了一个TokenInfo端点,用于验证和提供有关access_token在该过程早期获得的信息。

令牌信息包括userid

“此字段的值是已登录用户的不可变标识符,可在您的应用程序中创建和管理用户会话时使用。无论 client_id 为何,此标识符都是相同的。这提供了跨平台关联配置文件信息的能力同一组织中的多个应用程序。”

这听起来只是票(或者可能是令牌)!

userid仅当https://www.googleapis.com/auth/userinfo.profile范围包含在访问令牌请求中时才存在,所以不要忘记这一点。

同样,在Facebook API中,一旦您获得访问令牌,您就可以访问图形 API,您可以在其中获取用户数据,包括 ID。

Twitteruser_id在访问令牌响应中包含作为其身份验证 API的一部分


如果您在 .NET 项目中使用 OAuth,这可能会很有用...我今天发现WebMatrix 2 Beta包括用于 Facebook、Twitter、Windows Live、Google 和 Yahoo 的 OAuth2 客户端,并且可以从 MVC 项目中使用。有人告诉我,您只需要WebMatrix.Security.dll就可以了。它已安装到C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies. 虽然它处于测试阶段并且被隐藏起来,但它是一个很好的入门方法,并且可能会使DotNetOpenAuth库的学习曲线不那么陡峭。

于 2012-05-26T20:45:54.123 回答
1

OAuth 2.0 没有解决这个问题——它不是一个身份/SSO 协议。

但是,OpenID Connect(基于 OAuth 2.0 构建)是。您可能会很幸运并通过 OpenID Connect 取回用户的电子邮件地址(请参见此处- 取决于范围),或者您可能会取回对给定依赖方来说应该是唯一的 PPID 。无论哪种方式 - 它应该是可能的。

或者,可以使用 SAML。它支持许多适合的不同风格的用户标识符。

于 2012-05-22T21:52:23.417 回答