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

Pat*_*ick 4 access-token jwt keycloak

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

{
  "exp": ...,
  "iat": ...,
  "jti": "...",
  "iss": "http://localhost:8088/idp-provider-context/auth/realms/realmname",
  "aud": [...
Run Code Online (Sandbox Code Playgroud)

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

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

dre*_*ash 7

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

  • 选择您的realm
  • clients
  • 选择适合client您的用例的

(对于旧的 Keycloak UI)

  • Mappers
  • 点击Create
  • Mapper type选择中Hardcoded claim
  • 将字段填写Token Claim Namerealm name
  • 将字段填写Claim valuethe name of the realm
  • 相应地填写重命名字段。
  • 点击Save

(对于新的 Keycloak UI)

  • 转到选项卡Client Scopes
  • 单击范围-专用(例如,在我的示例中为测试专用)

在此输入图像描述

  • 单击Configure a new mapper(或Add Mapper> By configuration如果您之前已经为此客户端创建了映射器)

在此输入图像描述

  • 选择Hardcoded claim
  • 将字段填写Token Claim Namerealm name
  • 将字段填写Claim valuethe name of the realm
  • 相应地填写重命名字段。
  • 点击Save

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