8.5. 请求方令牌


请求方令牌 (RPT) 是使用 JSON web signature (JWS) 进行了数字签名的 JSON web token (JWT)。该令牌基于之前由红帽构建的 Keycloak 签发的 OAuth2 访问令牌构建,用于代表用户或其自有的特定客户端。

当您解码 RPT 时,您会看到类似如下的有效负载:

{
  "authorization": {
      "permissions": [
        {
          "resource_set_id": "d2fe9843-6462-4bfc-baba-b5787bb6e0e7",
          "resource_set_name": "Hello World Resource"
        }
      ]
  },
  "jti": "d6109a09-78fd-4998-bf89-95730dfd0892-1464906679405",
  "exp": 1464906971,
  "nbf": 0,
  "iat": 1464906671,
  "sub": "f1888f4d-5172-4359-be0c-af338505d86c",
  "typ": "kc_ett",
  "azp": "hello-world-authz-service"
}
Copy to Clipboard Toggle word wrap

在这个令牌中,您可以从权限声明获取服务器授予 的所有权限

另请注意,权限直接与您要保护的资源/范围相关,并与实际授予和发出这些相同的权限的访问控制方法完全分离。

8.5.1. 内省请求方令牌

有时,您可能希望内省请求方令牌(RPT)以检查其有效性或获取令牌内的权限,以便在资源服务器端强制实施授权决策。

令牌内省可帮助您进行两种主要用例:

8.5.2. 获取有关 RPT 的信息

令牌内省基本上是一个 OAuth2令牌内省 - 兼容端点,您可以从中获取有关 RPT 的信息。

http://${host}:${port}/realms/${realm_name}/protocol/openid-connect/token/introspect
Copy to Clipboard Toggle word wrap

要使用这个端点内省 RPT,您可以按如下方式向服务器发送请求:

curl -X POST \
    -H "Authorization: Basic aGVsbG8td29ybGQtYXV0aHotc2VydmljZTpzZWNyZXQ=" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d 'token_type_hint=requesting_party_token&token=${RPT}' \
    "http://localhost:8080/realms/hello-world-authz/protocol/openid-connect/token/introspect"
Copy to Clipboard Toggle word wrap
注意

以上请求使用 HTTP BASIC 并传递客户端的凭据(客户端 ID 和 secret)来验证尝试内省令牌的客户端,但您可以使用红帽构建的 Keycloak 支持的任何其他客户端验证方法。

内省端点需要两个参数:

  • token_type_hint

    使用 requests_party_token 作为此参数的值,这表示您要内省 RPT。

  • token

    使用令牌字符串,因为服务器在授权过程中返回的令牌字符串作为参数的值。

因此,服务器响应是:

{
  "permissions": [
    {
      "resource_id": "90ccc6fc-b296-4cd1-881e-089e1ee15957",
      "resource_name": "Hello World Resource"
    }
  ],
  "exp": 1465314139,
  "nbf": 0,
  "iat": 1465313839,
  "aud": "hello-world-authz-service",
  "active": true
}
Copy to Clipboard Toggle word wrap

如果 RPT 没有激活,则会返回这个响应:

{
  "active": false
}
Copy to Clipboard Toggle word wrap

否。就像红帽构建的 Keycloak 服务器发布的常规访问令牌一样,RPT 也使用 JSON Web 令牌(JWT)规格作为默认格式。

如果要在不调用远程内省端点的情况下验证这些令牌,您可以解码 RPT 并在本地查询其有效。解码令牌后,您还可以使用令牌中的权限来强制实施授权决策。

这基本上是策略强制执行者的作用。请务必:

  • 验证 RPT 的签名(基于域的公钥)
  • 基于它的 exp, iat, 和 aud 声明来查询令牌的有效性。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat