Keycloak:将用户名映射到主题声明

Keycloak: mapping username on subject claim

我需要配置 Keycloak,以便它创建一个 JWT,声明 "sub" 填充了用户名,而不是 sub.

中的默认用户 ID

这意味着代替这个令牌:

{
    "jti": "b1384883-9b59-4788-b09f-98b40b7e3c3b",
   ...
    "sub": "fbdb4e4a-6e93-4b08-a1e7-0b7bd08520a6",
    "preferred_username": "m123456"
}

我需要接收:

 {
    "jti": "b1384883-9b59-4788-b09f-98b40b7e3c3b",
    ...
    "sub": "m123456",
    "preferred_username": "m123456"
 }

你能建议怎么做吗?

我尝试了用户名映射器,但它添加了第二个 "sub" 声明并且 jwt 无效。

我是这样解决的

1) 在 "Clients" 配置部分选择您的客户端

2) 转到 "Mappers" 选项卡并创建一个新的 "Script Mapper"

3) 将打开名为 "Script" 的可编辑部分,您可以在其中编辑以下行:token.setSubject(user.getUsername());

4) 现在我的令牌包含 "sub": "user123456"

5) 看看这张图片

或这种方式:使用用户 属性 映射器类型。

    {
      "id": "5d45fe41-83c6-4457-807b-5240ff7c09b9",
      "name": "UsernameInSubject",
      "protocol": "openid-connect",
      "protocolMapper": "oidc-usermodel-property-mapper",
      "consentRequired": false,
      "config": {
        "userinfo.token.claim": "true",
        "user.attribute": "username",
        "id.token.claim": "true",
        "access.token.claim": "true",
        "claim.name": "sub",
        "jsonType.label": "String"
      }