LoginSignup
10
0

KeycloakとActive Directoryを連携させてみた

Last updated at Posted at 2023-12-10

お品書き

1. やること
2. 検証構成
3. Active Directory(LDAP)側の設定
4. Keycloak側の設定
5. 動作確認
6. まとめ

1.やること

アドベントカレンダー11日目はKeycloakの機能として提供されている「ユーザーフェデレーション機能」を利用した、Active Directory(以下、AD)でのLDAP認証および情報の連携を試してみようと思います。
認証だけでなく、ADに登録されているユーザー情報をKeycloakへ一括登録したり、逆にKeycloakからADにユーザー情報を登録したりといったこともついでに試してみました。

2.検証構成

役割 OS アプリケーション プライベートIPアドレス
SSOサーバ Ubutu 22.04.3 LTS Keycloak ver.22.0.2 172.26.22.26
ADサーバ Windows Server 2022 Active Directory 172.26.22.94

※AWS上のEC2で構築し、サイズはt2.microで統一

3.Active Directory(LDAP)側の設定

1. ADのインストール(省略)
下記のサイトを参考にインストールしました。

2. ドメインの作成
今回は「example.com」で作成しました。
3. ログインテスト用ユーザの作成(ldap-user,ldap-user2)

image.png

※バインド用のユーザは新規に作成してもいいが、今回はAdministratorを使用しました。
※ADは特に設定不要でLDAPが利用可能です。

4.Keycloak側の設定

今回使用するレルムはldapレルムとします。

1. Keycloakの管理コンソールにログイン
localhost以外でアクセスする場合は、初期設定で「https required」になっている場合があり
keycloakを起動しているサーバのターミナルで下記のコマンドでhttpsの強制を解除してください。

./kcadm.sh config credentials --server http://localhost:8080/ --realm master --user admin
./kcadm.sh update realms/master -s sslRequired=NONE

※今回はテスト環境なのでHTTPで検証しております。本番環境においては基本HTTPSが必須となりますのでご注意ください。

2. 左メニューバーから、demoレルムを選択
3. 左メニューバーで「User federation」をクリック
4. プロバイダーを追加...からLDAPを選択
5. 以下のように設定値を入力して、保存をクリック
UI display name:任意
Vendor:ActiveDirectory
Connection URL:ldap://サーバのIP
Bind DN:cn=バインドユーザ名,cn=Users,dc=ドメイン名,dc=ドメイン名
Bind credentials:バインドユーザのパスワード
Edit mode:WRITABLE
Users DN:cn=Users,dc=ドメイン名,dc=ドメイン名
Username LDAP attribute&RDN LDAP attribute:cn
UUID LDAP attribute:objectGUID
User object classes:top, person, organizationalPerson, user
Import users:ON
Sync Registrations:ON
上記以外はデフォルトのままでいきました。

image.png

image.png

5.動作確認

ログインテスト

  1. SSOサーバにアクセス出来る端末でhttp://172.26.22.26:8080/realms/ldap/account/ にアクセス
  2. 右上の「Sign in」をクリック
  3. ユーザ名(cn)とパスワードを入力してログイン

image.png

image.png

AD側のログインに関するlogも確認
image.png

Keycloakからのパスワード変更

なぜかうまくいかない
image.png

AD側のlogに何か出ている
image.png
Microsoftの公式ドキュメントを調査すると、下記のような記載があり
LDAPSでないとパスワード変更が不可な仕様となっています。

この属性を変更するには、クライアントがサーバーへの 128 ビット トランスポート層
セキュリティ (TLS)/Secure Socket Layer (SSL) 接続を持っている必要があります。

ユーザ同期(AD→Keycloak)

  1. Keycloakの管理コンソールにログイン
  2. 左メニューバーから、ldapレルムを選択
  3. 左メニューバーでUser federationをクリック
  4. ldapをクリック
  5. 右上のプルダウンより「Sync all users」を選択
  6. 緑枠のポップアップに同期結果が表示

image.png

同期後のユーザ一覧
image.png

※krbtgtユーザはADに作られるサービスアカウント

ユーザ同期(Keycloak→AD)

前回の記事でobjectClassの必須項目をマッパー設定に入れる必要があると記載があり、今回のADユーザのobjectClassは下記の通りです。

objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user

とりあえず、デフォルト設定のマッパーで動作確認をしました。
image.png

  1. 左メニューバーでUsersを選択後にAdd userをクリック
    image.png

  2. ldap-user3ユーザに関する必要情報を入力してCreateをクリック
    image.png

  3. ユーザの作成を確認

keycloakのユーザー一覧画面
image.png

ADのユーザ一覧画面
image.png

パスワードは設定されてないので、AD側でパスワードを新規に設定する必要があります。
※ADをご利用の環境ではADからのユーザ同期が基本となりますので、このユースケースはあまりないと思います。

まとめ

前回の記事からKeycloakのバージョンがかなり変わってしまったので、今回はアップデート記事として執筆しました!
軽微な設定内容の変更はあったものの、基本的な概念は変更がなかった印象です。
GUI操作による構築が可能なため、Keycloak初学者でもある程度感覚的に進めすことが出来ました。
KeycloakとADの連携によるSSOをご検討の方は一読していただけますと幸いです。

10
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
0