2017-01-20 13 views
2

私はLDAP接続を私のKeycloakに設定しました。私はマッパーを使って通常のLDAPの役割をキークローキングにインポートすることができました。私たちのLDAPでは、cn、sn、cのようにユーザー属性としてマップされたロールも持っています... attributeRolesです。もちろん、これらは技術的観点からは実際の役割ではなく、ユーザー属性(アプリケーションとして役割として使用されます)です。LDAP固有の属性をKeycloakロールにマップします

私が達成したいのは、これらのユーザー属性の役割(attributeRoles)をkeycloakの実際の役割にマップすることです。

あなたはこの特定の問題を抱えていて、何とかそれを解決できましたか?

ご協力いただければ幸いです。

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を持っている:次のコードでRoleLDAPStorageMapperでonImportUserFromLDAPが

+0

当面はすぐにキークローキングでこれを行う方法はありませんが、必要に応じてこれを実装することができます。たぶん将来のリリースでこれを持つことになるでしょう。クールだろう。 –

+0

私はこれをKeycloakで自分で実装することができました。誰かがいくつかのポインタが必要な場合は、私に知らせてください。 –

+0

私はこれを正確に実装する最良の方法を探していますが、どのオプションを選択しましたか? –

答えて

1

更新

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); 
     } 
    } 
} 

はそれがお役に立てば幸いです。

+0

こんにちはエイドリアン、私はあなたが助けることができるのだろうか - 私はKC 3.1.0で同様の変更を加えようとしていますが、正しいクラスを見つけることができましたが、.classファイル自体は、読み込み可能なテキストとして開くことができません、どうやってこれを回避しましたか、別のIDEですか? –

+0

こんにちはTom。 まず、gitプロジェクトをローカルマシン(https://github.com/keycloak/keycloak)で実行する必要があります。その後、変更を行い、ビルドして配布用にビルドする必要があります.Githubページの「Starting Keycloak」の部分を確認してください。 希望します。 –

関連する問題