Keycloak 客户端映射器将领域名称显示为 JWT 令牌中的单个属性

Posted

技术标签:

【中文标题】Keycloak 客户端映射器将领域名称显示为 JWT 令牌中的单个属性【英文标题】:Keycloak client mapper to show the relam name as individual attibute in JWT token 【发布时间】:2021-03-18 22:04:17 【问题描述】:

默认情况下,keycloak(此处为版本 11)提供有关领域的信息,获取令牌,仅解析令牌有效负载的 iss 属性。例如


  "exp": ...,
  "iat": ...,
  "jti": "...",
  "iss": "http://localhost:8088/idp-provider-context/auth/realms/realmname",
  "aud": [...

是否有一种内置方式(如客户端映射器)将有关领域名称的信息作为专用属性直接添加到 JWT 令牌?

一种解决方法是为每个用户添加一个属性“realmname”并将领域名设置为值。但一方面这似乎有点混乱,因为它是冗余信息。另一方面,这可以稍微加快应用程序的速度,因为没有此属性的令牌/用户或其中的错误值可能已经被视为无效而无需请求后端。这将识别未在为应用程序定义的所需进程中创建的用户。

【问题讨论】:

【参考方案1】:

使用Client Mapper 代替用户属性。为此,请访问:

选择您的realm; 转至clients; 选择您要针对其请求令牌的client; 转至Mappers; 点击创建 在Mapper type中选择Hardcoded claimToken Claim Name : 域名 Claim value :领域的名称。 相应地填写其余部分。

客户端将是您用来进行身份验证的客户端。

【讨论】:

以上是关于Keycloak 客户端映射器将领域名称显示为 JWT 令牌中的单个属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keycloak 中创建脚本映射器?

Keycloak 中的协议映射器如何工作?

Keycloak 使用自定义协议映射器从数据库/外部源添加额外声明

keycloak 从自定义协议映射器抛出身份验证错误

keycloak - 使用 kcadm.sh 将协议映射器添加到 keycloak

使用 kcadm.sh 在 Keycloak 中创建协议映射器