当使用模拟时,jwt令牌中的resource_access字段中缺少 clientId



我使用的是Keycloak 14.0.0,并启用了token_exchange的特性预览,以便进行模拟。在Keycloak中配置我的用户,使其在客户机"领域管理"上承担模拟角色后;(根据[文档][1]),由于令牌无效,进行令牌交换的实际请求失败。

经过一些调试后,发现jwt令牌确实是错误的:

...
"session_state": "a03aeg0e-b5ce-4a50-9038-c339e50338c4",
"acr": "1",
"allowed-origins": [
"http://0.0.0.0:9180"
],
"scope": "openid identity_provider email admin profile company",
"permissions": [
"consented-readonly",
"readonly",
"trackingdisabled"
],
"resource_access": {
".roles": [
"impersonation"
]
},
"email_verified": false,
"idp": "myidp",
...

在上面,请注意"。roles"。我认为这是不正确的。它应该是这样的:

"resource_access": {
"myclient": {
"roles": [
"impersonation"
]
}

如何解决这个问题?[1]: https://www.keycloak.org/docs/latest/securing_apps/index.html扮演

结果是映射器的配置不正确。在本例中是"客户角色"。映射器(客户端范围)->角色→映射器→keycloak ui中的客户端角色,在我的keycloak设置中,其值为:

resource_access..roles

这是不正确的,因为它应该包含一个clientId占位符,如下所示:

resource_access.${client_id}.roles

在此更改之后,accessToken包含实际的客户端,从而在accessToken

中生成有效的json。

相关内容

最新更新