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"
}
我需要配置 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"
}