我使用的是Keycloak 23.0.0版本。我正在尝试配置默认客户端范围以在 JWT 令牌中启用用户组。我正在使用直接授权流程来生成访问令牌。我已经查看了 Stack Overflow 和 Keycloak 社区,但我的问题仍未解决。我已附上我的客户范围和组成员映射器的屏幕截图。任何快速帮助将不胜感激。 我还仔细检查了我的用户组和用户,所有配置似乎都很好。
这是我当前的 jwt 令牌
alg: "RS256",
typ: "JWT",
kid: "vL8kIqWQFfX6oj-gN64xZibBqQuV3JzXqKkwGp5KU3Y"
}.
{
exp: 1692262142,
iat: 1692258542,
jti: "32620dd7-3dc9-464f-af49-153ba3d389d0",
iss: "https://example.com/realms/domain_acl",
aud: "account",
sub: "46e82311-a784-4c2f-b1ef-057ca127f18b",
typ: "Bearer",
azp: "api-client",
session_state: "e9fbc2b8-b548-423a-8f5a-8469c0a92eb5",
acr: "1",
realm_access: {
roles: [
"******",
"*******"
]
},
resource_access: {
account: {
roles: [
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
scope: "profile email",
sid: "e9fbc2b8-b548-423a-8f5a-8469c0a92eb5",
email_verified: false,
name: "domain ACl",
preferred_username: "dev",
given_name: "domain ACl",
email: "[email protected]"
}.
[signature]
我在Keycloak V22.0.1中测试过
在您的领域创建群组
加入群组成为用户
你做错地方了
Client scopes
您应该选择
profile
并使用 Group Membership
进行映射
获取用户访问令牌并解码后显示
JWT
另存为
get-token.js
文件名。
const axios = require('axios')
const decode = require('jwt-decode')
const getUserToken = async (user_name, password) => {
try {
const resp = await axios.post(
url = 'http://localhost:8080/realms/domain_acl/protocol/openid-connect/token',
data = new URLSearchParams({
'client_id': 'admin-cli',
'username': user_name,
'password': password,
'grant_type': 'password'
})
)
return resp.data.access_token
} catch (err) {
// Handle Error Here
console.error(err);
}
}
(async () => {
const user_token = await getUserToken('user1', '1234')
console.log('user_token JWT: ' + JSON.stringify(decode(user_token), null, 4))
})()
安装依赖项
npm install axios jwt-decode
运行它
node get-token.js
结果
干得好,我也遇到同样的问题,谢谢!