搜索

7.2. 内部令牌到内部令牌交换

download PDF

使用内部令牌来对特定客户端进行令牌交换,您希望为不同的目标客户端交换这个令牌。您为什么会想进行此操作?当客户端本身有 mint 令牌时,通常会发生这种情况,需要为访问令牌中需要不同的声明和权限的其他应用程序创建额外的请求。如果您需要执行"权限级",且应用程序需要在比较可信应用上调用并且不想传播您当前的访问令牌,则可能需要进行此类交换的其他原因。

7.2.1. 授予对交换的权限

希望为不同客户端交换令牌的客户端需要在管理控制台中授权。您需要在您要交换的目标客户端中定义 token-exchange fine grain 权限。

目标客户端权限

Target Client Permission

流程

  1. 将启用 的权限 切换到 ON

    目标客户端权限

    exchange target client permission set

    该页面显示一个 token-exchange 链接。

  2. 点击该链接以开始定义权限。

    这个设置页面会显示。

    目标客户端交换权限设置

    Target Client Exchange Permission Setup

  3. Authorization 链接为这个权限定义策略
  4. Policies 标签页。
  5. 创建 客户端 策略.

    客户端策略创建

    exchange target client policy

  6. 在起始客户端中输入,作为请求令牌交换的经过身份验证的用户。
  7. 创建此策略后,返回目标客户端的 token-exchange 权限,再添加您刚刚定义的客户端策略。

    应用客户端策略

    exchange target client exchange apply policy

您的客户端现在有调用的权限。如果您没有正确执行此操作,如果您尝试进行交换,将得到一个 403 Forbidden 响应。

7.2.2. 发出请求

当客户端交换针对其他客户端的令牌的现有令牌时,请使用 audience 参数。此参数必须是您在 Admin 控制台中配置的目标客户端的客户端标识符。

curl -X POST \
    -d "client_id=starting-client" \
    -d "client_secret=the client secret" \
    --data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
    -d "subject_token=...." \
    --data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:refresh_token" \
    -d "audience=target-client" \
    http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/token

subject_token 参数必须是目标域的访问令牌。如果您的 requested_token_type 参数是一个刷新令牌类型,则响应将同时包含访问令牌、刷新令牌和过期。以下是您从这个调用中获取的 JSON 响应示例:

如果没有设置 使用者 参数,则参数的值默认为生成令牌交换请求的客户端。

与机密客户端不同,公共客户端不允许使用来自其他客户端的令牌来执行令牌交换。如果您传递了 subject_token,发布令牌的 (机密)客户端应与客户端发出请求匹配;如果向其他客户端发布,则发出请求的客户端应当位于使用者上。

如果您明确设置目标 audience (客户端与发出请求的客户端不同),您应确保为客户端集配置了 token-exchange 范围权限,设置 audience 权限以允许客户端成功完成交换。

{
   "access_token" : "....",
   "refresh_token" : "....",
   "expires_in" : 3600
}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.