【问题标题】:OAuth2: What exactly is the "client"OAuth2:究竟什么是“客户端”
【发布时间】:2018-06-04 20:38:42
【问题描述】:

在 OAuth2 的上下文中,我想确切地知道我的应用程序的哪些组件被认为是“客户端”。

以下是来自rfc6749的相关操作


第 1.1 节:

客户

代表资源所有者并经其授权发出受保护资源请求的应用程序。术语“客户端”并不意味着任何特定的实现特征(例如,应用程序是在服务器、桌面还是其他设备上执行)。

第 2.1 节:

客户端可以实现为分布式组件集,每个组件具有不同的客户端类型和安全上下文(例如,具有机密服务器的分布式客户端-基于组件和公共的基于浏览器的组件)。如果授权服务器不为此类客户端提供支持或不提供有关其注册的指导,则客户端应将每个组件注册为单独的客户端。


场景 1

  • 我的应用程序 (A) 由一个基于浏览器的前端(组件 A1)和一个后端 API(组件 A2)组成。
  • 后端 (A2) 从 Google 的授权服务器 (G1) 获取访问令牌 (Authorization Code Grant) 以访问 Google 的资源服务器 (G2)

以下哪些说法是正确的?

  1. “客户”指的是 (A)。 (A) 是机密的,由公共组件 (A1) 和机密组件 (A2) 组成。
  2. “客户”指的是 (A2)。 (A2) 是机密客户。
  3. 将 (A1) 称为客户端是不正确的,因为 (A1) 不会向 (G2) 发出受保护的资源请求。

场景 2

  • 我的应用程序 (A) 由一个基于浏览器的前端(组件 A1)和一个后端 API(组件 A2)组成。
  • 基于浏览器的前端 (A1) 从 Google 的授权服务器 (G1) 获取访问令牌 (Implicit Grant) 以访问 Google 的资源服务器 (G2)

以下哪些说法是正确的?

  1. “客户”指的是 (A)。 (A) 是公共客户端,由公共组件 (A1) 和机密组件 (A2) 组成。
  2. “客户”指的是 (A1)。 (A1) 是公共客户。
  3. 将 (A2) 称为客户端是不正确的,因为 (A2) 不会向 (G2) 发出受保护的资源请求。

【问题讨论】:

    标签: oauth-2.0 authorization


    【解决方案1】:

    在场景 1 中,组件 A1 不是客户端,因为它不访问来自 Google 的受保护资源。但是组件 A2 是客户端。它是一个受保护的客户端,因为它不会向资源所有者(只是应用程序用户)公开客户端凭据。从您的终点来看,A1 和 A2 都是单个实体(单个应用程序)。但是授权服务器不是这样。

    在场景 2 中,组件 A1 获取令牌并消耗 Google 资源。因此,从授权服务器的角度来看,A1 是客户端。它是一个公共客户端,因为它无法保护客户端凭据(如果有的话)(它是基于浏览器的。!)。和以前一样,从你的角度来看,A1 和 A2 是一个实体。

    现在考虑一个场景,您需要同时使用 A1 和 A2 组件中的 Google 服务。现在您可以选择注册两个客户端,因为从授权服务器的角度来看,它会看到两个不同的实体。一个可以保护凭证,另一个不能。通过这样做,您可以充分利用 OAuth 客户端类型。为此,auth。服务器可能会促进某些功能(我也不完全了解)。它可能类似于为每个客户端注册两个重定向 URL 的能力。或者为机密和公共客户使用相同的客户身份。

    【讨论】:

    • 谢谢卡文杜。这是否意味着在 1.1 节中 client 指的是单个组件(即授权服务器的视角),而在 2.1 节中 client 指的是所有组合的组件(A)?
    • 根据我从规范中了解到的,是的,第 1.1 节定义了客户端实体(不讨论实现细节)。第 2.1 节定义了不同的客户端类型以及它们是如何形成的。是的,第 2.1 节引用了所有组件并定义了在它们上采用 OAuth 2.0 的方法。
    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 2012-08-27
    • 2010-11-12
    • 2011-03-18
    • 2011-01-22
    • 1970-01-01
    相关资源
    最近更新 更多