Closed2

KeycloakとFreeIPAをLDAPで連携しているとき無効ユーザーを同期する

hrkohrko

本当はこのスレッドに書いてあるように、FreeIPA側の nsAccountLock 属性をどうにかしてKeycloak側の enabled 属性に割り当てる事ができれば一番だが、用意されている属性マッパー(user-attribute-ldap-mapper)には真偽値を反転させるような機能はついていない。

頑張れば独自のマッパーを書くことで解決できそうだが、なかなかに労力が要ると思うので、今回はLDAPフィルターでなんとかした方法を書き残しておく。

User LDAP filter の欄に (!(nsAccountLock=TRUE)) と書いておけば、FreeIPA側で無効にされたユーザーはKeycloakのデータベースから削除される。

注意点としては、FreeIPA側でユーザーを無効にすると、当該ユーザーはKeycloak上から削除されてしまうため、Keycloak側にだけ保存される情報(OTPやPasskey等の情報)も同時に消えてしまう点がある。

もっとも、頻繁に特定のユーザーを無効化/有効化するのでもない限り、ほとんどのケースで問題ないと思う。

hrkohrko

LDAPの代わりにSSSDで連携すればこんな変なことをせずに済むのだろうが、DockerでKeycloakを動かしていると一筋縄ではいかないようである。コンテナ化しているのにホスト側のDbusソケットをコンテナ内にマウントする必要があるのもイマイチ…

参考: https://keycloak.discourse.group/t/keycloak-in-docker-container-and-sssd-user-federation-failed-authentication-java-lang-nullpointerexception/5663

このスクラップは2023/06/27にクローズされました