如果 OAuth 2.0 授权服务器和资源服务器位于单独的应用程序中,它们如何共享令牌?
How OAuth 2.0 Authorization Server and Resources Server share tokens if they are in separate applications?
我想知道如果授权服务器在单独的应用程序中,它们如何与资源服务器共享令牌(访问令牌)?
我正在使用 Spring OAuth 2.0/授权码授权类型。
我刚好有一个很棒的video that explains everything to you. Spend an hour。值得你花时间。我保证。
一些定义
Client
- 需要访问服务器 上的API的应用程序
Resource Server
- 托管受保护 API 的应用程序
Authorization Server
- 颁发令牌的应用程序,断言客户端的身份
场景简单
假设有一个名为 Photo Storage
的应用程序。这个应用程序所做的就是让我们上传照片、下载照片、更新照片和删除照片。
Photo Storage 是一个资源服务器。
一个名为 Photo Editor
的移动应用程序,它知道如何编辑照片。照片编辑器是一个 客户端
现在,Photo Editor 希望您能够登录,以便它可以访问您在 Photo Storage 应用程序中的照片。但是 Photo Storage 不知道 Photo Editor(也不需要)。但是 Photo Storage 需要有人为 Photo Editor 担保,为此,我们有一个 Authorization Server。
看起来像这样
Photo Editor Photo Storage Authorization Server
Get Token ------------authorization_code (https)----------->
Download Photo ----token(https)---->
Edit Photo (local)
Upload Photo -----token(https)----->
这有什么好处:
- 照片编辑客户端了解照片存储和授权服务器
- 资源服务器、照片存储知道授权服务器,但不知道照片编辑器
- 授权服务器知道照片编辑器(client_id,client_secret)但它对照片存储一无所知(但它可以,如果照片存储也是一个客户端)
客户端(照片编辑器)通过 HTTP 请求从授权服务器下载令牌。令牌本身是一个 字符串 。可以编码为 JSON(JSON Web Token,JWT)或者它可以是唯一的任意字符串。
当客户端需要访问资源服务器时,它将调用资源服务器上的 HTTP API 并将令牌作为请求的一部分在 HTTP header)
GET /photo/download/1 HTTP/1.1
Authorization: Bearer dsadsadsadasdasdasda.....
资源服务器将在内部或联系授权服务器验证令牌,并根据结果允许或拒绝来自客户端的调用。
希望对您有所帮助。正如我所说,video 将通过示例更详细地解释这一点。
TL;DR 对您问题的回答是令牌只是一个字符串,它作为 HTTP 请求的一部分发送。这些应用程序都可以位于不同的服务器上(客户端 -> 智能 phone、资源服务器 -> 亚马逊 AWS 服务器、授权服务器 -> Google 云服务器)
我想知道如果授权服务器在单独的应用程序中,它们如何与资源服务器共享令牌(访问令牌)?
我正在使用 Spring OAuth 2.0/授权码授权类型。
我刚好有一个很棒的video that explains everything to you. Spend an hour。值得你花时间。我保证。
一些定义
Client
- 需要访问服务器 上的API的应用程序
Resource Server
- 托管受保护 API 的应用程序
Authorization Server
- 颁发令牌的应用程序,断言客户端的身份
场景简单
假设有一个名为 Photo Storage
的应用程序。这个应用程序所做的就是让我们上传照片、下载照片、更新照片和删除照片。
Photo Storage 是一个资源服务器。
一个名为 Photo Editor
的移动应用程序,它知道如何编辑照片。照片编辑器是一个 客户端
现在,Photo Editor 希望您能够登录,以便它可以访问您在 Photo Storage 应用程序中的照片。但是 Photo Storage 不知道 Photo Editor(也不需要)。但是 Photo Storage 需要有人为 Photo Editor 担保,为此,我们有一个 Authorization Server。
看起来像这样
Photo Editor Photo Storage Authorization Server
Get Token ------------authorization_code (https)----------->
Download Photo ----token(https)---->
Edit Photo (local)
Upload Photo -----token(https)----->
这有什么好处:
- 照片编辑客户端了解照片存储和授权服务器
- 资源服务器、照片存储知道授权服务器,但不知道照片编辑器
- 授权服务器知道照片编辑器(client_id,client_secret)但它对照片存储一无所知(但它可以,如果照片存储也是一个客户端)
客户端(照片编辑器)通过 HTTP 请求从授权服务器下载令牌。令牌本身是一个 字符串 。可以编码为 JSON(JSON Web Token,JWT)或者它可以是唯一的任意字符串。
当客户端需要访问资源服务器时,它将调用资源服务器上的 HTTP API 并将令牌作为请求的一部分在 HTTP header)
GET /photo/download/1 HTTP/1.1
Authorization: Bearer dsadsadsadasdasdasda.....
资源服务器将在内部或联系授权服务器验证令牌,并根据结果允许或拒绝来自客户端的调用。
希望对您有所帮助。正如我所说,video 将通过示例更详细地解释这一点。
TL;DR 对您问题的回答是令牌只是一个字符串,它作为 HTTP 请求的一部分发送。这些应用程序都可以位于不同的服务器上(客户端 -> 智能 phone、资源服务器 -> 亚马逊 AWS 服务器、授权服务器 -> Google 云服务器)