(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Keycloak】User Storage Providerを利用してテキストファイルでユーザ管理を行う

スポンサーリンク

はじめに

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 federation

ここで今回利用するカスタム 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ファイルを配置することで、外部データソースを利用してユーザ管理が可能です。
個別の開発が必要となるためハードルは高いですが、既存のデータ格納先をそのまま利用したい場合には選択肢として利用できます。

以上、ご参考になれば幸いです。