将特定于LDAP的属性映射到KeyClope角色

将特定于LDAP的属性映射到KeyClope角色,ldap,keycloak,Ldap,Keycloak,我在KeyClope中设置了LDAP连接。我已经使用映射器成功地将普通LDAP角色导入到KeyClope中。在我们的LDAP中,角色也映射为用户属性,所以像cn、sn、c。。。我们有属性表。当然,从技术角度来看,这些并不是真正的角色,而是用户属性(它们在我们的应用程序中用作角色) 我想要实现的是将这些用户属性角色(attributeRoles)映射到KeyClope中的真实角色 你们有没有人有过这个特殊的问题并设法解决了 非常感谢您的帮助。使用以下代码更新RoleldapstorageApper

我在KeyClope中设置了LDAP连接。我已经使用映射器成功地将普通LDAP角色导入到KeyClope中。在我们的LDAP中,角色也映射为用户属性,所以像cn、sn、c。。。我们有属性表。当然,从技术角度来看,这些并不是真正的角色,而是用户属性(它们在我们的应用程序中用作角色)

我想要实现的是将这些用户属性角色(attributeRoles)映射到KeyClope中的真实角色

你们有没有人有过这个特殊的问题并设法解决了


非常感谢您的帮助。

使用以下代码更新RoleldapstorageApper中的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());
        }
    }
Map attributes=ldapUser.getAttributes();
for(Map.Entry:attributes.entrySet()){
if(entry.getKey().equals()){
//尝试将该属性导入KeyClope角色
importAttributesFunction(用户、领域、条目.getValue());
}
}
这里有importAttributes函数:

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);
        }
    }
}
public void importAttributesFunction(UserModel用户、realmodel领域、Set sRoles){
for(字符串sRole:sRoles){
RoleContainerModel roleContainer=getTargetRoleContainer(领域);
RoleModelRole=roleContainer.getRole(sRole);
如果(角色==null){
role=roleContainer.addRole(sRole);
}
如果(!user.hasRole(角色)){
grantRole(角色);
}
}
}

希望它能有所帮助。

目前还没有现成的KeyClope解决方案,但如果您愿意,可以自己实现。也许他们在未来的版本中会有这个。那太酷了。我已经成功地在KeyClove中实现了这一点。如果有人需要一些建议,请告诉我。我正在努力找到实现这一点的最佳方法,你选择了哪些选项?嗨。我已经在onImportUserFromLDAP函数中调整了RoleldapstorageApper.java类。另外,不要忘记在onImportUserFromLDAP中导入userAttributedApstorageApper.java中的角色。似乎我不能在这里添加代码,因为我没有足够的空间。嗨,Adrian,我想知道你是否能帮我-我正在尝试在KC 3.1.0中进行类似的更改,我已经找到了正确的类。但是.class文件本身似乎是以一种我无法作为可读文本打开的格式编码的,你是如何解决这个问题的,不同的IDE?嗨,汤姆。首先,您需要在您的计算机上本地运行git项目:。在这之后,您需要进行更改,构建,然后构建以供分发。检查github页面上的“StartingKeyClope”部分。希望能有帮助。