默认情况下,keycloak(此处为版本 11)提供有关领域的信息,获取 token ,仅解析 token 有效负载的 iss 属性。例如
{
"exp": ...,
"iat": ...,
"jti": "...",
"iss": "http://localhost:8088/idp-provider-context/auth/realms/realmname",
"aud": [...
是否有构建方式,如客户端映射器,将有关领域名称的信息作为专用属性直接添加到 JWT token ?
一种解决方法是为每个用户添加一个属性“realmname”并将 realmname 设置为值。但一方面,这似乎有点困惑,因为它是冗余信息。另一方面,这可能会稍微加快应用程序的速度,因为没有此属性或其中的错误值的 token /用户可能已经被视为无效而无需请求后端。这将识别未在为应用程序定义的所需过程中创建的用户。
最佳答案
使用 Client Mapper
代替用户属性。为此,请访问:
- 选择您的
领域
; - 转到
客户
; - 选择您要向其请求 token 的
客户端
; - 转到
映射器
; - 点击创建
- 在
Mapper type
中选择Hardcoded claim
; token 声明名称
: 域名声明值
:领域名称。- 相应地填写其余部分。
客户端将是您用来进行身份验证的客户端。
关于jwt - Keycloak 客户端映射器将域名显示为 JWT token 中的单个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65184441/