OAuth2:"客户"

时间:2018-06-04 20:38:42

标签: oauth-2.0 authorization

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

以下是rfc6749

的相关行动

第1.1节:

  

客户端

     

应用程序代表资源所有者及其授权进行受保护的资源请求。术语"客户"并不暗示任何特定的实现特征(例如,应用程序是在服务器,桌面还是其他设备上执行)。

第2.1节:

  

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

场景1

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

以下哪项陈述是正确的?

  1. "客户机"指(A)。 (A)是保密的,由公共部分(A1)和机密部分(A2)组成。
  2. "客户机"指(A2)。 (A2)是机密客户。
  3. 将(A1)称为客户端是不正确的,因为(A1)不会向(G2)提出受保护的资源请求。
  4. 场景2

    • 我的应用程序(A)包含基于浏览器的前端(组件A1)和后端API(组件A2)。
    • 基于浏览器的前端(A1)从Google的授权服务器(G1)获取访问令牌(隐式授权),以便访问Google的资源服务器(G2)

    以下哪项陈述是正确的?

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

1 个答案:

答案 0 :(得分:2)

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

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

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