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 选项卡。
身份供应商权限
流程
将启用 的权限 切换到 ON。
身份供应商权限
页面中显示 token-exchange 链接。
点击链接以开始定义权限。
这个设置页面会出现。
身份供应商交换权限设置
点 Authorization 链接,再进入 Policies 标签页来创建客户端策略。
客户端策略创建
- 输入作为请求令牌交换的经过身份验证的用户的起始客户端。
返回到身份提供程序的 token-exchange 权限,再添加您刚刚定义的客户端策略。
应用客户端策略
您的客户端现在有调用的权限。如果您没有正确执行此操作,如果您尝试进行交换,将得到一个 403 Forbidden 响应。
7.3.2. 发出请求 复制链接链接已复制到粘贴板!
当您的客户端将现有的内部令牌切换到外部时,您要提供 requested_issuer 参数。参数必须是配置的身份提供程序的别名。
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://...."
}
{
"access_token" : "....",
"expires_in" : 3600
"account-link-url" : "https://...."
}
如果外部身份提供程序没有以任何原因链接,您可以使用此 JSON 文档获取 HTTP 400 响应代码:
{
"error" : "....",
"error_description" : "..."
"account-link-url" : "https://...."
}
{
"error" : "....",
"error_description" : "..."
"account-link-url" : "https://...."
}
错误 声明将为 token_expired 或 not_linked。提供了 account-link-url 声明,客户端可以执行 客户端初始化帐户链接。大多数(如果不是全部)供应商都需要通过浏览器 OAuth 协议链接。使用 account-link-url 时,只需在其中添加 redirect_uri 查询参数,并可转发浏览器来执行链接。