12.4. 外部令牌到内部令牌交换


您可以为内部令牌信任和交换外部令牌,供外部身份提供程序使用。这可用于在域间桥接,或者只是信任来自您的社交提供程序的令牌。它的工作方式与身份提供程序浏览器登录相似,如果新用户不存在,则会将新用户导入到您的域中。

注意

外部令牌交换的当前限制是,如果外部令牌映射到现有用户,则不允许交换,除非现有用户已具有到外部身份提供程序的帐户链接。

当交换完成后,将在域中创建用户会话,并且您将收到访问和刷新令牌,具体取决于 requested_token_type 参数值。您应该注意,这个新用户会话将保持活动状态,直到超时或直至您调用通过这个新访问令牌的域的 logout 端点。

这些类型的更改需要在管理门户中配置的身份提供程序。

注意

目前不支持 SAML 身份提供程序。terwitter 令牌无法交换。

12.4.1. 为交换授予权限

在进行外部令牌交换之前,您可以为调用客户端授予该交换的权限。授予此权限的方式与 授予外部权限的内部 相同。

如果您还提供了一个 audience 参数,其值指向调用者之外的其他客户端,还必须授予调用客户端权限以与 audience 参数中特定的目标客户端交换。本节的前面 讨论了如何 执行此操作。

12.4.2. 发出请求

subject_token_type 必须是 urn:ietf:params:oauth:token-type:access_tokenurn:ietf:params:oauth:token-type:jwt。如果类型是 urn:ietf:params:oauth:token-type:access_token,您指定 subject_issuer 参数,它需要是配置的身份供应商的别名。如果类型是 urn:ietf:params:oauth:token-type:jwt,则提供程序将通过 JWT 中的 iss (issuer)声明匹配,该声明必须是提供程序的别名,或者在提供程序配置中注册签发者。

若要验证,如果令牌是访问令牌,则将调用提供程序的用户 info 服务来验证令牌。成功调用将意味着访问令牌有效。如果主题令牌是 JWT,并且如果提供程序启用了签名验证,则会尝试该验证,否则它将默认调用用户信息服务来验证令牌。

默认情况下,内部令牌 mint 将使用调用客户端来确定令牌中的什么部分使用为调用客户端定义的协议映射器。或者,您可以使用 audience 参数指定不同的目标客户端。

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=...." \
    -d "subject_issuer=myOidcProvider" \
    --data-urlencode "subject_token_type=urn:ietf:params:oauth:token-type:access_token" \
    -d "audience=target-client" \
    http://localhost:8080/realms/myrealm/protocol/openid-connect/token
Copy to Clipboard Toggle word wrap

如果您的 requested_token_type 参数是刷新令牌类型,则响应将同时包含访问令牌、刷新令牌和过期。以下是您从此调用返回的示例 JSON 响应:

{
   "access_token" : "....",
   "refresh_token" : "....",
   "expires_in" : 3600
}
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat