5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Keycloakによる認証基盤の立ち上げ(1) Wildfly版

Last updated at Posted at 2022-03-27

この記事の概要

image.png

  • 既存の認証基盤を持たない組織の前提
  • 認証基盤としてKeycloak導入、組織で保持するアプリのSSO用に活用する
  • アプリごとにどんなRealmを切るかは試行錯誤

Keycloakの紹介

  • 基本的な機能は、NRIさんの紹介記事があるので参考に ⇒ Keycloakとは
  • 基盤は Javaサーブレット ⇒ 稼働先OSやアプリケーションサーバやについて選択の幅が広く持てる
  • ライセンスは Apache-2.0

本記事執筆時の諸事情

試使用を開始し、現在も試使用中なのは v16.1.1
折り悪く、ちょうどKeycloakは v16 から v17 への移行の過程で、同梱する標準アプリケーションサーバを Wildfly から Quarkus に切り替えたとのこと。
もちろん Quarkus への興味はあるけど、とりあえずは Wildfly ベースで試用した内容を提示・公開する。

構成

こんな感じとした。

strunture.png

導入・試用

配布物の展開

手元でメモリに余裕のあるホストを模索、Windows10 (32bit) ベースの端末をサーバとして拠出予定だったので、そちらに入れる。
インストールツールとしての scoop が、(あらゆる意味で)容易なのでmanifestつくる。

keycloak16.json
{
    "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であることが分かるように、サービスの表示名くらいは変更する。

service.bat (抜粋)
set DISPLAYNAME=Keycloak based on WildFly
> service.bat install

インストールできたら、Windowsのサービスマネージャからサービス起動する1

listen設定

standalone.xml を編集する。

当初 AJP Listener でApacheの後ろにつけようとしたのだけど、動作が安定しなかった2ので諦めた。

普通にhttp / https proxyの後ろに置いても、よきにはからってくれるようだ。

その他設定補足

ちゃんと運用したいならバックエンドDBの設定するようにとドキュメントにも書かれているが、まずは試用したいだけなのでデフォルトのH2DBのまま使用する。

Apache側の設定

既存サーバーに仮想サイト設定を追加する。

keycloak.example.com.conf
<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) の記載に従って操作できる。

最低限必要なのは以下くらい。

  1. 初期ユーザー作成・ログイン
  2. Master Realm での メールサーバーの設定
  3. アプリ用に Realmの追加

もちろん認証方法としてOTPを使えるようにしたり、二段階認証できるようにしたり、ユーザーの登録受付できるようにしたりしたいのであれば、それぞれ設定が必要。
ほとんど試せていないが追々確認していく。

その他

Master realmを無効にしてはいけない!
万が一無効にしてしまった場合は、DBの強制更新くらいしか回復方法が無さそう。
(CLIを使うための認証方法もなくなってしまい、正規ルートが無くなる見える)

H2DB利用時の回復方法は 別記事にまとめた

参考

その後

Quarkusベースで立ち上げなおしました。

  1. 実行ファイルの引数に既視感があるなと思ったら、この手続き自体が別件で触っているTomcat-8.5と同じだった。。 Apacheファミリーなので当然か。

  2. 詳細は忘れた。。

5
2
1

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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?