7.3. 外部令牌交换的内部令牌


您可以从外部身份提供程序为 externl 令牌 mint 交换域令牌。此外部身份提供程序必须在管理控制台的 Identity Provider 部分中配置。目前只支持基于 OAuth/OpenID Connect 的外部身份提供程序,其中包括所有社交供应商。Red Hat Single Sign-On 不执行到外部供应商的后台交换。因此,如果帐户没有链接,您将无法获取外部令牌。要能够获取这些条件之一的外部令牌,必须满足以下条件:

  • 用户必须至少使用外部身份提供程序登录
  • 用户必须通过用户帐户服务与外部身份提供程序相关联
  • 用户帐户使用 Client Initiated Account Linking API 通过外部身份提供程序链接。

最后,必须将外部身份提供程序配置为存储令牌,或者,上述操作之一必须使用相同的用户会话和您要交换的内部令牌来执行。

如果帐户没有链接,则交换响应将包含一个可用于建立它的链接。这在进行 Request 部分进行 进一步讨论。

7.3.1. 授予对交换的权限

外部令牌交换请求内部将被拒绝使用 403, Forbidden 响应,直到您为调用客户端授予与外部身份提供程序交换令牌的权限。要向客户端授予权限,您需要进入身份提供程序的配置页面到 Permissions 选项卡。

身份供应商权限

exchange idp permission unset

流程

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

    身份供应商权限

    exchange idp permission set

    页面中显示 token-exchange 链接。

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

    这个设置页面会出现。

    身份供应商交换权限设置

    Identity Provider Exchange Permission Setup

  3. Authorization 链接,再进入 Policies 标签页来创建客户端策略。

    客户端策略创建

    Client Policy Creation

  4. 输入作为请求令牌交换的经过身份验证的用户的起始客户端。
  5. 返回到身份提供程序的 token-exchange 权限,再添加您刚刚定义的客户端策略。

    应用客户端策略

    Apply Client Policy

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

7.3.2. 发出请求

当您的客户端将现有的内部令牌切换到外部时,您要提供 requested_issuer 参数。参数必须是配置的身份提供程序的别名。

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:access_token" \
    -d "requested_issuer=google" \
    http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/token
Copy to Clipboard Toggle word wrap

subject_token 参数必须是目标域的访问令牌。requested_token_type 参数必须是 urn:ietf:params:oauth:token-type:access_token 或 left blank。目前不支持其他请求的令牌类型。以下是您从这个调用中获取的 JSON 响应成功的示例。

{
   "access_token" : "....",
   "expires_in" : 3600
   "account-link-url" : "https://...."
}
Copy to Clipboard Toggle word wrap

如果外部身份提供程序没有以任何原因链接,您可以使用此 JSON 文档获取 HTTP 400 响应代码:

{
   "error" : "....",
   "error_description" : "..."
   "account-link-url" : "https://...."
}
Copy to Clipboard Toggle word wrap

错误 声明将为 token_expirednot_linked。提供了 account-link-url 声明,客户端可以执行 客户端初始化帐户链接。大多数(如果不是全部)供应商都需要通过浏览器 OAuth 协议链接。使用 account-link-url 时,只需在其中添加 redirect_uri 查询参数,并可转发浏览器来执行链接。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat