如果OAuth 2.0授权服务器和资源服务器位于单独的应用程序中,它们如何共享令牌?

时间:2019-02-07 17:44:44

标签: spring-security oauth-2.0 spring-security-oauth2

我想知道授权服务器(如果位于单独的应用程序中)如何与资源服务器共享令牌(访问令牌)?

我正在使用Spring OAuth 2.0 /授权代码授予类型。

1 个答案:

答案 0 :(得分:2)

我碰巧有一个出色的video,可以为您解释所有内容。在上面花费an hour。值得您花时间。我保证。

一些定义

  1. Client-需要访问服务器上的API的应用程序
  2. Resource Server-托管受保护的API的应用程序
  3. Authorization Server-发行令牌并断言客户端身份的应用程序

场景很简单

假设有一个名为Photo Storage的应用程序。该应用程序要做的就是让我们上传照片,下载照片,更新照片和删除照片。

照片存储是资源服务器

一个移动应用程序称为Photo Editor,它知道如何编辑照片。照片编辑器是 client

现在,照片编辑器希望您能够登录,以便它可以访问照片存储应用程序中的照片。但是照片存储并不了解照片编辑器(也不需要)。但是照片存储需要有人担保照片编辑器,为此,我们有一个授权服务器

看起来像这样


    Photo Editor                 Photo Storage           Authorization Server

    Get Token  ------------authorization_code (https)----------->

    Download Photo ----token(https)---->

    Edit Photo (local)

    Upload Photo -----token(https)----->

这是一个很好的选择:

  1. 客户端(照片编辑器)了解照片存储和授权服务器
  2. 照片存储的资源服务器,虽然知道授权服务器,但对照片编辑器却一无所知
  3. 授权服务器了解照片编辑器(client_id,client_secret),但对照片存储一无所知(但如果照片存储也是客户端,则可以)

客户端(照片编辑器)通过HTTP请求从授权服务器下载令牌。令牌本身是 string 。可以编码为JSON(JSON Web令牌,JWT),也可以是唯一的任意字符串。

当客户端需要访问资源服务器时,它将在资源服务器上调用HTTP API,并将令牌作为请求的一部分发送到HTTP标头中

    GET /photo/download/1 HTTP/1.1
    Authorization: Bearer dsadsadsadasdasdasda.....

资源服务器将在内部或与授权服务器联系来验证令牌,并根据结果允许来自客户端的呼叫或拒绝它。

我希望这会有所帮助。正如我所说的,video将通过示例更详细地说明这一点。

对您的问题的TL; DR回答是令牌只是一个字符串,它作为HTTP请求的一部分发送出去。这些应用程序都可以位于不同的服务器上(客户端->智能手机,资源服务器-> Amazon AWS服务器,授权服务器-> Google云服务器)