はじめに
Keycloak(RedHat SSO)には「User Storage SPI」という拡張機能があり、これを用いると直接接続しているデータベースとは別の認証情報ストアを利用することができます。
本記事では公式が提供する「user-storage-simple」というチュートリアルを利用し、テキストファイルで保持されたユーザ名パスワードを利用してユーザ管理を行う流れを記載しました。
環境情報
- Linux(fedora)
- keycloak-21.1.2
- Apache Maven 3.8.8
事前準備
Keycloakをインストールした上で管理者ユーザでログインできるようにしておきます。
管理者ユーザにてmasterレルムの「User federation」のタブをクリックすると以下のようなKerberosとLDAPに関するものがデフォルトでありました。
ここで今回利用するカスタム User Storage Providerの元ネタをインストールするために以下を実施。
# git clone https://github.com/keycloak/keycloak-quickstarts.git
# cd keycloak-quickstarts/extension/user-storage-simple/
# mvn -Dmaven.test.skip=true -Pextension clean install [INFO] Scanning for projects... ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ...
mavenによってtargetディレクトリが新規作成され、出力としてjarファイル(user-storage-properties-example.jar )が生成されています。
# ls target/ classes dependency-maven-plugin-markers generated-sources maven-archiver maven-status user-storage-properties-example.jar wildfly-28.0.0.Beta1
Keycloakでモジュールの読み込み
先程のjarファイルをkeycloakのprovidersディレクトリに配置した上で
# cp -r keycloak-quickstarts/extension/user-storage-simple/target/user-storage-properties-example.jar keycloak-x/providers/
Keycloakを起動します。
# ./kc.sh start-dev --http-port=8180 Updating the configuration and installing your custom providers, if any. Please wait. ...
すると先程の画面にプロバイダーが追加されています。
今回は同画面から「Add Writeable-property-file Provider」を選択し、以下の設定を入力。
UI display name * = Test
Path = /root/keycloak-x/users.properties
Cache policy = DEFAULT
Pathに記載したフルパスに:
区切りでユーザ名とパスワードを記載したファイルを用意しておきます。
hoge:fugafuga
User Storage Providerを利用したユーザ管理
Usersにて*
を入力して検索すると、adminとは別にテキストファイルに記載したユーザが表示されます。同ユーザとパスワードで確かにログイン処理が行え、ユーザ画面からKeycloak上でパスワードを変更するとサーバ上のファイルに記載のパスワードに変更がかかります。
尚、これらの仕組みの詳細はソースコードディレクトリ配下に配置されたJavaのコードから確認できます。
# tree user-storage-simple/src/main/java/org/keycloak/quickstart/writeable/ user-storage-simple/src/main/java/org/keycloak/quickstart/writeable/ ├── PropertyFileUserStorageProvider.java └── PropertyFileUserStorageProviderFactory.java
終わりに
Keycloakではprovidersディレクトリに作成したjarファイルを配置することで、外部データソースを利用してユーザ管理が可能です。
個別の開発が必要となるためハードルは高いですが、既存のデータ格納先をそのまま利用したい場合には選択肢として利用できます。
以上、ご参考になれば幸いです。