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

时间:2019-06-19 10:56:47

标签: keycloak

我需要配置Keycloak,以便它创建一个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无效。

2 个答案:

答案 0 :(得分:2)

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

mapping user property to claim

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

答案 1 :(得分:0)

我以这种方式解决了。

1)在“客户端”配置部分中,选择您的客户端

2)转到“映射器”标签并创建一个新的“脚本映射器”

3)将打开一个名为“脚本”的可编辑部分,您可以在其中编辑以下行:token.setSubject(user.getUsername());

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

5)看看这张图片

enter image description here