我需要配置 Keycloak,以便它创建一个 JWT,声明“sub”填充了用户名,而不是 sub 中的默认 userId。
这意味着,而不是这个令牌:
{
"jti": "b1384883-9b59-4788-b09f-98b40b7e3c3b",
...
"sub": "fbdb4e4a-6e93-4b08-a1e7-0b7bd08520a6",
"preferred_username": "m123456"
}
Run Code Online (Sandbox Code Playgroud)
我需要收到:
{
"jti": "b1384883-9b59-4788-b09f-98b40b7e3c3b",
...
"sub": "m123456",
"preferred_username": "m123456"
}
Run Code Online (Sandbox Code Playgroud)
你能建议怎么做吗?
我尝试过用户名映射器,但它添加了第二个“子”声明,并且 jwt 无效。
小智 15
或者这样:使用用户属性映射器类型。

{
"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"
}
Run Code Online (Sandbox Code Playgroud)
我是这样解决的。
1)在“客户端”配置部分选择您的客户端
2)转到“映射器”选项卡并创建一个新的“脚本映射器”
3) 一个名为“脚本”的可编辑部分将打开,您可以在其中编辑以下行: token.setSubject(user.getUsername());
4)现在我的令牌包含 "sub": "user123456"
5)看看这张图片
| 归档时间: |
|
| 查看次数: |
4618 次 |
| 最近记录: |