OAuth 2.0 令牌解析
本文探讨了 OAuth 2.0 令牌解析,这是一种允许受保护资源向授权服务器查询令牌元数据的方法,用于确定访问或刷新令牌是否有效。
OAuth 2.0 令牌解析定义了一种方法,允许授权的受保护资源查询授权服务器,以确定与给定令牌(访问令牌或刷新令牌)相关的元数据,由 OAuth 客户端提供。基于特定令牌的元数据,它允许资源所有者访问受保护的资源。
这些元数据包括:
- 令牌当前是否激活(或者是否已过期或被撤销)
- 访问令牌授予的权限(通常通过 OAuth 2.0 范围传达)
- 授予令牌的授权上下文(包括谁授权了令牌以及给哪个客户端发放)
令牌解析使受保护的资源能够查询此信息,无论这些信息是否包含在令牌本身中。
根据编码方式,访问令牌有两种类型:
- 基于标识符:令牌代表一个随机且难以猜测的标识符,与授权服务器数据库中的授权相关联。
- 自包含:授权信息编码在令牌内,并通过加密保护以防止篡改。JSON Web Token (JWT) 是这种方法的通用标准。
对于自包含的令牌,可以直接从访问令牌解析授权相关的元数据。然而,对于基于标识符的令牌,必须使用授权服务器的令牌解析功能来验证/检索元数据。
令牌解析请求
使用基于标识符的访问令牌需要通过网络请求向授权服务器进行验证。有一种称为 OAuth 2.0 Token Introspection (RFC 7662) 的标准协议。
受保护的资源将通过 POST 向授权服务器的 introspection 端点发送令牌,并将返回一个包含令牌参数的 JSON 对象。
请注意,解析请求不能随意发起;它们必须满足以下条件之 一:
- 使用凭证进行身份验证(必须在授权服务器上预注册),或
- 使用访问令牌进行授权。
因此,在这种特定的交互中,受保护的资源成为 OAuth 客户端,而授权服务器则成为受保护的资源。
下面是一个解析请求的示例,其中受保护的资源使用客户端 ID 和客户端密钥进行身份验证,这些是在注册为 OAuth 客户端后从授权服务器获取的。
下面是一个直接使用访问令牌的解析请求的示例。可以通过注册的机器对机器应用程序的凭证以及 client_credentials
授权类型直接从 /token
端点获取访问令牌。
令牌解析响应
最重要的参数是 active
,它是一个布尔值。如果为 true
,则表示令牌有效,JSON 对象将包括其他令牌详情,例如范围值。如果为 false
,则令牌无效或已过期,受保护的资源必须返回一个 401 Unauthorized 响应,并带有 invalid_token
错误代码。
下面是一个有效令牌的响应示例:
除了必须的 active
,所有其他参数都是可选的。
受保护的资源可以使用这些附加字段来确定访问权限,类似于它解析和验证 JWT 访问令牌的方式。