この記事の概要
- 既存の認証基盤を持たない組織の前提
- 認証基盤としてKeycloak導入、組織で保持するアプリのSSO用に活用する
- アプリごとにどんなRealmを切るかは試行錯誤
Keycloakの紹介
- 基本的な機能は、NRIさんの紹介記事があるので参考に ⇒ Keycloakとは
- 基盤は Javaサーブレット ⇒ 稼働先OSやアプリケーションサーバやについて選択の幅が広く持てる
- ライセンスは Apache-2.0
本記事執筆時の諸事情
試使用を開始し、現在も試使用中なのは v16.1.1
。
折り悪く、ちょうどKeycloakは v16
から v17
への移行の過程で、同梱する標準アプリケーションサーバを Wildfly
から Quarkus
に切り替えたとのこと。
もちろん Quarkus
への興味はあるけど、とりあえずは Wildfly
ベースで試用した内容を提示・公開する。
構成
こんな感じとした。
導入・試用
配布物の展開
手元でメモリに余裕のあるホストを模索、Windows10 (32bit) ベースの端末をサーバとして拠出予定だったので、そちらに入れる。
インストールツールとしての scoop
が、(あらゆる意味で)容易なのでmanifestつくる。
{
"version": "16.1.1",
"description": "Open Source Identity and Access Management",
"homepage": "https://www.keycloak.org/",
"extract_dir": "keycloak-16.1.1",
"url": "https://github.com/keycloak/keycloak/releases/download/16.1.1/keycloak-16.1.1.tar.gz",
"hash": "bb120dd1433ba7f2713cef2f064556c058bc0409a8ce0a62aa9cccc1349d1ad7"
}
scoop
セットアップ済の環境なら、上記manifestからインストールすればファイル展開は簡単。
JVMも同様にscoopでインストール。
> scoop install corretto8-jdk
> scoop install keycloak16
(本業のほうで)Java8ベースで展開しているシステムが多くJava17 LTSなどへの移行は当面難しそうなので、Java8ベースで。
corretto8-jdk
を選択したのは個人的な好みで、積極的な理由は無い。
Windowsサービスへの登録
'scoop\apps\keycloak16\current' 以下に展開されたフォルダ構成は、素の Wildfly
を展開した内容と同じような感じ。
(というか、よく読まずに先にWildfly単体を準備してしまってからKeycloakを紐解いたらなんか同じだったので驚いた)
設定ガイド でも Wildflyの文書 を参照するようにとある。
なので WildFlyのWindowsサービスへの登録方法 と同じ手順でサービス登録可能。
Keycloakであることが分かるように、サービスの表示名くらいは変更する。
set DISPLAYNAME=Keycloak based on WildFly
> service.bat install
インストールできたら、Windowsのサービスマネージャからサービス起動する1。
listen設定
standalone.xml
を編集する。
当初 AJP Listener
でApacheの後ろにつけようとしたのだけど、動作が安定しなかった2ので諦めた。
普通にhttp / https proxyの後ろに置いても、よきにはからってくれるようだ。
その他設定補足
ちゃんと運用したいならバックエンドDBの設定するようにとドキュメントにも書かれているが、まずは試用したいだけなのでデフォルトのH2DBのまま使用する。
Apache側の設定
既存サーバーに仮想サイト設定を追加する。
<VirtualHost _default_:443>
ServerName keycloak.example.com
...(中略)...
ProxyRequests off
ProxyPreserveHost On
ProxyVia On
ProxyTimeout 300
ProxyPass / http://host-b:80/ disablereuse=On
ProxyPassReverse / http://host-b:80/
...(中略)...
</VirtualHost>
初期ユーザーの作成・設定
ここまで出来たら Server Administration Guide (v16.1.1) の記載に従って操作できる。
最低限必要なのは以下くらい。
- 初期ユーザー作成・ログイン
-
Master Realm
での メールサーバーの設定 - アプリ用に Realmの追加
もちろん認証方法としてOTPを使えるようにしたり、二段階認証できるようにしたり、ユーザーの登録受付できるようにしたりしたいのであれば、それぞれ設定が必要。
ほとんど試せていないが追々確認していく。
その他
Master realmを無効にしてはいけない!
万が一無効にしてしまった場合は、DBの強制更新くらいしか回復方法が無さそう。
(CLIを使うための認証方法もなくなってしまい、正規ルートが無くなる見える)
H2DB利用時の回復方法は 別記事にまとめた 。