Keycloak KeyClope:在主题声明上映射用户名

Keycloak KeyClope:在主题声明上映射用户名,keycloak,Keycloak,我需要配置keydepeat,以便它创建一个JWT,声明“sub”中填充用户名,而不是sub中的默认userId 这意味着代替此令牌: { "jti": "b1384883-9b59-4788-b09f-98b40b7e3c3b", ... "sub": "fbdb4e4a-6e93-4b08-a1e7-0b7bd08520a6", "preferred_username": "m123456" } 我需要收到: { "jti": "b1384883-9

我需要配置keydepeat,以便它创建一个JWT,声明“sub”中填充用户名,而不是sub中的默认userId

这意味着代替此令牌:

{
    "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) 在“客户端”配置部分选择您的客户端

2) 转到“映射器”选项卡并创建新的“脚本映射器”

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"
      }