gpt4 book ai didi

java - 从 Java API 访问 keycloak 角色/用户属性

转载 作者:行者123 更新时间:2023-11-30 10:04:46 24 4
gpt4 key购买 nike

我在 Keycloak 中创建了一个角色和一个用户,并在两者中添加了一个属性;例如:

my_role_attr = 'x'
my_user_attr = 'y'

然后我尝试访问该信息。通过 JAVA KeycloakSecurityContext(和关联的 AccessToken/IDToken)。我可以看到角色名称和用户信息,但找不到这些属性。

我知道我必须创建一个协议(protocol)映射器“用户属性”以将“my_user_attr”映射到 token 声明中。然后就可以获取 AccessToken/IDToken 中的值了。

但是我找不到获取角色属性的方法。我没有看到角色属性的任何“协议(protocol)映射器”。我错过了什么吗?

最佳答案

我一直在尝试做同样的事情;这并不容易,但是您可以使用脚本映射器取得一些成功。源代码在 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;

请注意,您可能需要将“Multivalued”设置为“ON”并将“Claim JSON Type”设置为“Select One..”。

关于java - 从 Java API 访问 keycloak 角色/用户属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55702315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com