Keycloakとは（2023年12月版）

# Keycloakとは

Keycloakはオープンソースのアイデンティティ・アクセス管理（IAM）ソフトウェアです。シングルサインオンやAPIアクセスの認証・認可制御を実現するソフトウェアです。ちょうど6年前である[2017年のAdvent Calendar](https://qiita.com/daian183/items/30f01e162e03567ff21b)で初めてKeycloakを紹介したときは、この分野のOSSとしてはOpenAMが第一人者的な存在でした。その後、Keycloakは着実に進化し、2023年4月にCNCF（Cloud Native Computing Foundation）のIncubatingプロジェクトとして承認され、ますます注目度が上がっています。今やKeycloakがこの分野の代表的なOSSになったと言えるでしょう。近年ではKeycloak Alternativeを狙う他のOSS[^1]が登場したりと、逆に追いかけられる存在にまでなりました。

[^1]: [Authentik](https://github.com/goauthentik/authentik)や[ZITADEL](https://github.com/zitadel/zitadel)など、機能比較でKeycloakを挙げる新しいOSSが登場しています。

# Keycloakの提供機能

ここは過去の[記事](https://qiita.com/daian183/items/30f01e162e03567ff21b)や、[公式ガイド](https://www.keycloak.org/docs/latest/server_admin/index.html#features)（[日本語翻訳](https://keycloak-documentation.openstandia.jp/21.1/ja_JP/server_admin/index.html#features)）でも語られているため、詳しくはそちらを参照していただければと思いますが、個人的には

* OIDC/OAuth2だけでなく、SAML2.0にも対応
* パスキーに対応
* [FAPI（Financial-grade API）](https://openid.net/wg/fapi/)に対応
* [DPoP（OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer）](https://datatracker.ietf.org/doc/html/rfc9449)に対応（ただしまだPreview Support）

というように、**レガシーなところから最新の標準化仕様まで積極的に対応を進めている**点がスゴイと思っています。

# Keycloak as a Service

KecloakはOSSですので、一般的な使い方としては自前で環境を構築して稼働させるケース（いわゆる、セルフ・ホスト型）が多いかと思います。しかしながら、自前で構築・運用ではなくOktaやMicrosoft Entra IDのようにサービス利用したいニーズも一定数存在し、それに答えるものとして **Keycloak as a Service** も世の中には存在します。以下、自分の観測範囲ではありますがいくつか紹介します。

|#|サービス名|概要|
|:--|:--|:--|
|1|[Cloud-IAM](https://www.cloud-iam.com/)|自分の観測範囲だと最も最初に登場したKeycloak as a Service。フリープランも用意されており、簡単に試すことが可能。リージョンは選択できない（おそらくEUのみ？）。サインアップするとKeycloak管理画面にログインできるようになる。Keycloakそのものをサービス提供している。|
|2|[Bare.Id](https://www.bare.id/en/)|Keycloakをコアに使いつつサービスを提供しており、Keycloakは前面に出ていない（独自の管理画面などを提供）。|
|3|[Phase Two](https://phasetwo.io/)|フリープランも用意されており、簡単に試すことが可能。リージョンとしてUSとEUから選択が可能。サインアップするとKeycloak管理画面にログインできるようになる。Keycloakそのもの＋αをサービス提供している。＋αのユニークな点として、独自の拡張をKeycloakに組み込んでおり、例えばOrganization管理をKeycloakのレルム内でできるようにしている。|
|4|[intension](https://www.intension.de/en/keycloak-as-a-service/)|リージョンとしてはEUのみ。（おそらく）Keycloakそのもの+αをサービス提供している。＋αのユニークな点として、SCIMによるプロビジョニングを提供している。|
|5|[OpenStandia KAID](https://openstandia.jp/solution/openstandiakaid/)|Keycloakをコアに使いつつサービスを提供している唯一の国産サービス。Keycloakそのものをサービス提供している（顧客要望に合わせてカスタマイズ対応も可能）。ユニークな点として、認証・認可だけでなくID管理・IGA（Identity Governance and Administration）のOSSである[midPoint](https://github.com/Evolveum/midpoint)もセットで利用可能なプランもある。|


基本的に、Keycloakそのものをサービス提供するところが多いですが、中にはコア機能はKeycloakで作り、前面に見えるところは独自機能で提供するというスタイルのサービスもあるようです。サービス提供となると、OktaやMicrosoft Entra IDとの差別化ポイントは何？という点が気になると思いますが、価格面であったり、拡張性の高さ（独自テーマの設定や、独自のKeycloak Extensionの組み込みに対応していたりなど）があると思います。


# Keycloakを学ぶにあたって

公式ドキュメントの[Getting started](https://www.keycloak.org/guides#getting-started)から始めると、各プラットフォームでのKeycloakの動かし方を一通り学ぶことができます。しかし、Keycloakを扱う上で前提となる認証・認可の基礎部分に関しては公式ガイドでは特に解説していないため、中々理解が難しいかもしれません。ここ数年でKeycloakの書籍もたくさん出版されましたので、これらを活用するのも手です。以下、代表的なKeycloakの書籍です。

|#|書籍名|発売日|Keycloakバージョン|備考|
|:--|:--|:--|:--|:--|
|1|[Keycloak - Identity and Access Management for Modern Applications](https://www.amazon.co.jp/dp/B092KP135B)|2021/06/11|v12||
|2|[認証と認可 Keycloak入門 - OAuth/OpenID Connectに準拠したAPI認可とシングルサインオンの実現](https://www.amazon.co.jp/dp/4865943226)|2022/01/29|v15||
|3|[実践 Keycloak - OpenID Connect、OAuth 2.0を利用したモダンアプリケーションのセキュリティー保護](https://www.amazon.co.jp/dp/4814400098)|2022/10/15|v18|#1の日本語翻訳版ではありますが、Quarkus対応と補章の追加がされています。|
|4|[Keycloak - Identity and Access Management for Modern Applications (Second Edition)](https://www.amazon.co.jp/dp/1804616443)|2023/07/31|v22|#1のSecond Edtion。Quarkus、新管理コンソール対応がされています。|

認証・認可の基礎知識からきっちり習得されたい方は、#2の「認証と認可 Keycloak入門」がおすすめです。書籍で扱っているKeycloakのバージョンはQuarkus版ではない古いバージョンではあるものの、OAuth 2.0やOpenID Connectというプロトコルの解説や、シングルサインオン/API認可とはなんぞやについて丁寧に解説しています。この部分はKeycloakに限った話ではありませんので、認証・認可の基礎を学びたい方にもおすすめします。

ある程度、認証・認可については知っているという方の場合は、Quarkus対応がされている#3の「実践 Keycloak」または#4の「Keycloak - Identity and Access Management for Modern Applications (Second Edition)」を読むとよいでしょう。こちらはより実践的な話が多く記載されています（#4は2023年夏に出版されたばかりなので、新管理コンソールにも対応しています）。


# 2023年のKeycloak Advent Calendar

[2017年のAdvent Calendar](https://qiita.com/advent-calendar/2017/keycloak-by-openstandia)のときは、Keycloakのバージョンは3.3.0.CR2でした。6年間の間にバージョンアップを重ね、2023年12月現在は23.0.1が最新となっています。アーキテクチャもWildFlyベースから[Quarkus](https://ja.quarkus.io/)ベースへと大きく変わり、管理コンソール、エンドユーザ向けコンソールも新技術でリライトされ、大きく変わっています。そのため、過去の記事を参考にしづらい状況になっているかと思います。

というわけで、NRI OpenStandiaでは2023年に再びKeycloak Advent Calendarを始めることにしました！できるだけ最新のKeycloakバージョンを使って記事を再構成し、また単純に前回の焼き直しではなく、新しいネタ（各種クラウド環境へのデプロイ方法、パスキー、近年注目を集めつつある認可サービスとの連携ネタなど）も盛り込んで提供したいと思っています。

それでは、25日間、よろしくお願いいたします！