【问题标题】:Can an OAuth 2.0 access token be used to authenticate a user in another context?可以使用 OAuth 2.0 访问令牌在另一个上下文中对用户进行身份验证吗?
【发布时间】:2015-08-17 06:10:09
【问题描述】:

我想知道是否允许在应用程序之间传递用户的 OAuth 2.0 访问令牌并将其用作登录方法。

我有一个 iPhone 应用程序,它使用密码授权来验证用户身份,然后将其访问令牌用于未来的请求。 iPhone 应用程序还可以在标签页中打开我们的网站,我希望用户在打开此标签页时登录到我们的网站。

根据 OAuth 2.0 规范,是否允许将该令牌传递给 Web 请求并让 Web 服务器进行身份验证并为该请求登录用户?

例如,浏览器可能会打开以下位置(但使用标题,而不是查询字符串):

https://example.com/account?access_token=foo_bar

或者,可以使用用于 OAuth 身份验证和重定向的专用端点。

所以实际上,我的问题分为两部分;是否可以在应用程序上下文之间共享 OAuth 2.0 令牌,是否可以使用令牌在另一个上下文中对用户进行身份验证?

【问题讨论】:

  • 请注意 OAuth 2.0 访问令牌不会对用户进行身份验证...oauth.net/articles/authentication!
  • @HansZ。然而,该文章确实提到访问令牌可以用作身份验证的证明,并且可以将它们交换为用户凭据。抛开语义不谈,我可以使用从另一个应用程序提供的访问令牌登录网站上的用户帐户吗?
  • OAuth 2.0 访问令牌由授权服务器提供。它们可以在多个网站(资源服务器)上使用,前提是这些网站能够识别授权服务器。

标签: authentication oauth oauth-2.0


【解决方案1】:

在 OAuth 2.0 规范 (RFC 6749) 中,有几个方面可能是相关的。基本上一个client 可以接收一个被多个resource_servers 接受的access_token,但是如果client 由具有不同安全上下文的多个components 组成,它应该注册每个并使用不同的令牌:

跨多个资源服务器的单一令牌

A single authorization server may issue access tokens accepted by
multiple resource servers.

具有多个组件的单个客户端

A client may be implemented as a distributed set of components, each
with a different client type and security context (e.g., a
distributed client with both a confidential server-based component
and a public browser-based component).  If the authorization server
does not provide support for such clients or does not provide
guidance with regard to their registration, the client SHOULD
register each component as a separate client.

【讨论】:

  • 我不清楚 component 在这种情况下是什么。另外,如果 iPhone 应用和网站是两个独立的客户端,这是否意味着它们不能在它们之间共享访问令牌?
  • 在这种情况下,component 将是分布式应用程序的一部分,例如由移动应用程序和服务器应用程序组成的应用程序,两者都需要访问用户的资源.在这种情况下,移动应用程序和服务器应用程序的安全上下文将不同,移动应用程序是 public(不安全)客户端类型,而服务器应用程序是 confidential(安全)客户端类型。由于应用程序的两个部分具有不同的安全上下文,因此应分别注册并使用单独的访问令牌。
猜你喜欢
  • 1970-01-01
  • 2014-06-26
  • 2019-03-02
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 2023-03-20
相关资源
最近更新 更多