我在Keycloak中设置了LDAP连接。我已经设法使用映射器将正常的LDAP角色导入keycloak。在我们的LDAP中,我们还将角色映射为用户属性,因此像cn,sn,c ...我们有 attributeRoles 。当然,从技术角度来看,这些并不是真正的角色,而是用户属性(它们在我们的应用程序中用作角色)。
我想要实现的是将这些用户属性角色(attributeRoles)映射到keycloak中的真实角色。
你们有没有这个具体问题并设法以某种方式解决它?
任何帮助都将不胜感激。
答案 0 :(得分:1)
使用以下代码更新RoleLDAPStorageMapper中的onImportUserFromLDAP:
Map<String, Set<String>> attributes = ldapUser.getAttributes();
for (Map.Entry<String, Set<String>> entry : attributes.entrySet()){
if(entry.getKey().equals(<ATTRIBUTE>)){
// Try to import the attribute to Keycloak roles
importAttributesFunction(user, realm, entry.getValue());
}
}
这里有importAttributesFunction:
public void importAttributesFunction(UserModel user, RealmModel realm, Set<String> sRoles) {
for(String sRole: sRoles){
RoleContainerModel roleContainer = getTargetRoleContainer(realm);
RoleModel role = roleContainer.getRole(sRole);
if (role == null) {
role = roleContainer.addRole(sRole);
}
if(!user.hasRole(role)) {
user.grantRole(role);
}
}
}
希望它有所帮助。