Mar*_*zzi 5 java oauth-2.0 openid-connect keycloak
我在 Keycloak 中创建了一个角色和一个用户,并在其中添加了一个属性;例如:
my_role_attr = 'x'
my_user_attr = 'y'
Run Code Online (Sandbox Code Playgroud)
然后我尝试访问该信息。通过 JAVA KeycloakSecurityContext(以及关联的 AccessToken / IDToken)。我可以看到角色的名称和用户信息,但找不到这些属性。
我知道我必须创建一个协议映射器“用户属性”以将“my_user_attr”映射到令牌声明中。然后就可以获取AccessToken / IDToken中的值了。
但我找不到获取角色属性的方法。我没有看到任何角色属性的“协议映射器”。我是不是错过了什么。
小智 8
我一直在努力做同样的事情;这并不容易,但是您可以使用脚本映射器取得一些成功。https://github.com/keycloak/keycloak/blob/master/server-spi/src/main/java/org/keycloak/models/RoleModel.java的源代码有一些有用的信息。这个SO项目(谢谢Andre B)也有有用的信息How to create a Script Mapper in Keycloak? 。
我的(不完美或完整的)解决方案是:
/**
* Available variables:
* user - the current user
* realm - the current realm
* token - the current token
* userSession - the current userSession
* keycloakSession - the current userSession
*/
var roles = [];
var client = keycloakSession.getContext().getClient();
user.getClientRoleMappings(client).forEach(function(roleModel) {
var attr = [];
var names = {};
var rn = roleModel.getName();
var map = roleModel.getAttributes();
map.forEach(function(key, value){
var k = {};
var a = false;
value.forEach(function(l){
a = (l === 'true');
});
k[key] = a;
attr.push(k);
});
names[rn] = attr;
roles.push(names);
});
exports = roles;
Run Code Online (Sandbox Code Playgroud)
请注意,您可能需要将“多值”设置为“ON”,并将“声明 JSON 类型”设置为“选择一个..”。
| 归档时间: |
|
| 查看次数: |
8919 次 |
| 最近记录: |