密钥罩使用不同的客户端重新验证通过身份验证的用户 [英] Keycloak reauthenticate an Authenticated user with a different client

查看:20
本文介绍了密钥罩使用不同的客户端重新验证通过身份验证的用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有一个用户已经使用密钥罩向领域R下的公共客户端C1进行了身份验证,是否存在可以使用密钥罩进行身份验证的端点,该端点将为同一领域R下的不同公共客户端C2生成新的访问令牌?

[更新#1] 我尝试使用刷新令牌获取C2客户端的新访问令牌,但收到以下错误:

Invalid refresh token. Token client and authorized client don't match

[更新2] 因此,以上内容让我产生了尝试使用交换令牌授予类型的想法,现在我已经将其付诸实施。

curl --request POST 
  'https://myhost.com.au/auth/realms/<my realm>/protocol/openid-connect/token' 
  --header 'Content-Type: application/x-www-form-urlencoded' 
  --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' 
  --data-urlencode 'subject_token=<c1 access token>' 
  --data-urlencode 'subject_token_type=urn:ietf:params:oauth:token-type:access_token' 
  --data-urlencode 'requested_token_type=urn:ietf:params:oauth:token-type:refresh_token' 
  --data-urlencode 'client_id=<c2 client id>'

推荐答案

您的问题很有意义。遗憾的是,角色作用域映射文档无法说明在切换到其他客户端时如何生成新的访问令牌。

有一个Oauth2 RFC about token exchange。从Keycloak 11.0.2 token exchange is documented as a technology preview开始,必须通过-Dkeycloak.profile.feature.token_exchange=enabled

启用

您可以这样交换令牌(实际上取自问题):

Method: POST
URL: https://<keycloak.host>/auth/realms/myrealm/protocol/openid-connect/token
Body type: x-www-form-urlencoded
Form fields:    
. grant_type: urn:ietf:params:oauth:grant-type:token-exchange
. subject_token: <C1-access-token> 
. subject_token_type: urn:ietf:params:oauth:token-type:access_token
. requested_token_type=urn:ietf:params:oauth:token-type:refresh_token
. client_id: <C2-client-id>

以下是"role scope mapping" documentation中供其他读者阅读的一些上下文。

创建OIDC访问令牌或SAML断言时,所有用户 默认情况下,用户的角色映射作为声明添加到 令牌或断言。[.]访问令牌经过数字签名,并且可以 实际上被应用程序重用以远程调用其他 保障睡觉服务安全。这意味着如果应用程序获得 受损或存在向该域注册的流氓客户端, 攻击者可以获取具有广泛权限的访问令牌 而且你的整个网络都被攻破了。这就是角色范围 映射变得很重要。

角色作用域映射是限制声明的角色的一种方式 在访问令牌内。当客户端请求将用户 通过身份验证,他们收到的访问令牌将仅包含 您为客户端作用域显式指定的角色映射。

[...]要更改此默认行为,必须显式关闭 允许的全范围切换并声明您想要的特定角色 在每个单独的客户端中。或者,您也可以使用客户端 作用域为一组完整的 客户端。

这篇关于密钥罩使用不同的客户端重新验证通过身份验证的用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆