お疲れ様です。幾つかのサービスを運用していてそれぞれでユーザー管理はLDAP認証にしているので管理の手間は少ないのですが、グループ編成等でドメイン変更などのときに非常に困ります。だったら認証サービス立ててそいつ任せにしちゃえばって思うようになってきたので、試しに Keycloak を入れてみます。
目次
準備
Keycloak のダウンロード
下記リンク先から Server の ZIP ファイルをダウンロードします。
https://www.keycloak.org/downloads
WinSW のダウンロード
WinSW は任意のプログラムを Windows のサービスとして起動、停止できるソフトウェアです。
下記から最新の WinSW.NET461.exe をダウンロードします。
MySQL Connector/J のダウンロード
下記リンク先から MySQL の Jar ファイルをダウンロードし、適当なフォルダへ展開しておきます。(投稿時 5.1.48 )
MySQL :: Download MySQL Connector/J (Archived Versions)
MySQL をインストール
H2というJavaベースのリレーショナル・データベースがデフォルトで使われていますが、実運用では使用しない方がいいので MySQL に変更します。
既にインストール済みのときは不要です。
MySQL :: Download MySQL Installer から最新をダウンロードしてインストールします。(投稿時 5.7.31 )
データベースの作成
MySQL Workbench を起動してデータベースとユーザーを作成します。
インストール時に作成したデフォルトのインスタンスに接続し、Query のエディタータブで下記を実行します。
CREATE DATABASE keycloak CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT ALL ON keycloak.* to keycloak@localhost IDENTIFIED BY 'パスワード';
FLUSH PRIVILEGES;
インストール
ここでは「C:\Dev\Keycloak」にインストールすることとします。
各自の環境に合わせて置き換えてください。
Keycloak のインストール
下記リンク先を参考にインストールしてゆきます。
https://www.keycloak.org/getting-started/getting-started-zip
お試しや簡単運用するだけなら上記のドキュメントで十分なのですが、本格的に運用するのであれば下記URL先を参考にした方がよいです。
Server Installation and Configuration Guide
インストールはダウンロードしたファイルを展開して「C:\Dev\Keycloak」フォルダへ配置するだけです。
MySQL に変更
モジュール追加
「C:\Dev\Keycloak\modules\system\layers\keycloak\com\mysql\main」フォルダを作成して module.xml ファイルを下記の内容で作成します。
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.3" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.48.bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
ダウンロードした MySQL Connector/J の zip ファイルを展開した中にある下記のファイルをこのフォルダへ配置します。
mysql-connector-java-5.1.48.bin.jar
ドライバーの定義
「C:\Dev\Keycloak\standalone\configuration\standalone.xml」を編集します。
server/profile/subsystem/datasources/drivers タグへ下記を追記します。
<driver name="mysql" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
接続先の変更
datasource タグの「jndi-name=”java:jboss/datasources/KeycloakDS”」の内容を下記に変更します。
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
<connection-url>jdbc:mysql://localhost:3306/keycloak?characterEncoding=UTF-8&useSSL=false</connection-url>
<driver>mysql</driver>
<security>
<user-name>keycloak</user-name>
<password>パスワード</password>
</security>
<pool>
<max-pool-size>100</max-pool-size>
</pool>
</datasource>
サービスとして登録
ダウンロードした WinSW.NET461.exe を C:\Dev\Keycloak フォルダへ移動して Keycloak.exe に名前を変更し、設定ファイルとして下記の内容で Keycloak.xml ファイルを作成します。
ポートやパスは環境に合わせて変更してください。
<service>
<id>Keycloak</id>
<name>Keycloak</name>
<description>Keycloak</description>
<workingdirectory>C:\Dev\Keycloak</workingdirectory>
<executable>C:\Dev\Keycloak\bin\standalone.bat</executable>
<arguments></arguments>
<logmode>rotate</logmode>
</service>
Windows キーを押下して cmd と入力後 Ctrl + Shift + Enter を押下して管理者:コマンドプロンプトを起動し C:\Dev\Keycloak へ移動します。
cd /d C:\Dev\Keycloak
下記コマンドでサービスに追加します。
Keycloak.exe install
初期セットアップ
管理者ユーザー作成
日本語化
レルムの追加
LDAP を使う場合
設定のユーザー・フェデレーションを設定します。
設定内容を調べるのであれば LDAP Browser が便利じゃないかと思います。
- LDAP を設定します。
- ユーザー・フェデレーション・プロバイダーの追加
有効 : オン
- コンソール表示名 : ldap
- 優先度 : 0
- ユーザーのインポート : オフ
- 編集モード : READ_ONLY
- 登録の同期 : オフ
- ベンダー : Active Directory
- ユーザー名のLDAP属性 : sAMAccountName
- RDN LDAP属性 : cn
- UUID LDAP属性 : objectGUID
- ユーザー・オブジェクト・クラス : person, organizationalPerson, user
- 接続URL : ldap://localhost:389
- LDAPユーザーDN : DC=miyabis,DC=local
- カスタムユーザーLDAPフィルター :
- 検索スコープ : One Level
- バインドタイプ : simple
- LDAPバインドDN : LDAP 接続できるユーザーID
- バインド・クレデンシャル : パスワード
※ 接続URL を入力したら接続テストボタンをクリックして確認します。
※ バインド・クレデンシャル まで入力したら認証テストボタンをクリックして確認します。
LDAP を使わずユーザーを追加する場合
管理のユーザーで追加してゆきます。
- ユーザーの追加ボタンをクリックします。
- ユーザー名だけ必須なので入力して保存します。
- クレデンシャルタブでパスワードを設定します。
- Are you sure you want to set a password for the user?(ユーザーにパスワードを設定しても大丈夫ですか?)と聞かれるので Set Password をクリックします。
- 追加したユーザーでログインしてみます。
- 各自でパスワードを設定し直してもらいます。
- ログイン後の画面です。