Keycloakについて
Keycloakは、Webアプリケーションやサービスに対して認証・認可機能を提供するオープンソースのアイデンティティ管理ソリューションであり、主な役割として、以下の機能を持つ。
- シングルサインオン(SSO)機能により、ユーザーは一度ログインするだけで、複数のアプリケーションに対して再度認証を行うことなくアクセスできるようになる。これにより、ユーザー体験が向上し、セキュリティも強化される。
- ソーシャルログインにも対応しており、Google、Facebook、Twitterなどの外部プロバイダーと連携することで、ユーザーは既存のアカウントを使って手軽にログイン可能としている。
- ユーザー認証と認可の機能を提供し、ロール(役割)やグループに基づいた詳細なアクセス制御を実現できる。これにより、企業のポリシーに従った厳密なリソース管理が可能になる。
- 多要素認証(MFA)にも対応しており、ワンタイムパスワードやスマートフォンアプリとの連携による認証ステップを追加することで、セキュリティをさらに高めることができる。
- 直感的なユーザー管理用のWebインターフェースも備わっており、ユーザーの追加・編集・削除や権限の設定などをGUIから簡単に行うことができる。
- OpenID Connect、OAuth 2.0、SAMLなどの業界標準の認証・認可プロトコルに対応しているため、様々なアプリケーションやサービスと安全かつ柔軟に統合することが可能となる。
これらの機能により、Keycloakは企業や開発者にとって強力かつ柔軟なアイデンティティおよびアクセス管理(IAM)の基盤を提供するものとなっている。
Keycloakの構成要素
Keycloakは、アイデンティティとアクセス管理を柔軟に行うための以下のような構成要素を持っている。これらの要素は、システムのスケーラビリティやマルチテナント対応、細かなアクセス制御を実現するうえで重要なものとなる。
- Realm(レルム)はKeycloakにおける基本的な論理単位であり、ユーザーやクライアント(アプリケーション)を隔離して管理するための枠組みとなる。例えば、複数のサービスを運営している企業が、それぞれのサービスごとに異なるレルムを持つことで、完全に独立した認証環境を構築することができ、これは、マルチテナント構成にも適している。
- User(ユーザー)はKeycloakに登録された、ログイン可能な個人を指す。各ユーザーには、認証情報(ユーザー名・パスワードなど)だけでなく、メールアドレス、属性情報、所属グループなどのメタデータも紐づけることが可能となる。
- Client(クライアント)は、Keycloakと連携して認証・認可を行う外部アプリケーションやサービス。たとえば、Webアプリケーションやモバイルアプリ、APIなどが該当します。クライアントごとに使用するプロトコル(OpenID Connect, SAMLなど)や認証フローを細かく設定できる。
- Role(ロール)は、ユーザーやクライアントに割り当てることができるアクセス権限の定義単位となる。たとえば「admin」や「user」といったロールを定義し、それぞれに異なるアクセス権限を持たせることで、柔軟なアクセス制御が可能になる。
- Group(グループ)はユーザーを分類・整理するための仕組みで、ロールと組み合わせて使うことができる。複数のユーザーに共通のロールを一括で割り当てたい場合などに便利で、組織構造やチーム単位の管理に適している。
これらの構成要素が組み合わさることで、Keycloakは多様な認証・認可のニーズに対応できる堅牢なフレームワークとなっている。
Keycloakを用いることの利点
Keycloakを利用することで、認証・認可の仕組みを自前で一から構築する必要がなくなり、セキュリティ面や開発効率の大幅な向上が期待でき、特に、既存の標準プロトコルや豊富な機能があらかじめ備わっているため、複雑な認証基盤を短期間で導入することが可能となる。
また、直感的な管理UIが用意されており、ユーザー管理やロール設定、クライアントアプリケーションの登録などがブラウザ上から視覚的に行えるため、専門知識がなくても管理がしやすいという利点もある。
さらに、Keycloakは柔軟な拡張性を備えており、SPI(Service Provider Interface)を利用することで、独自の認証ロジックや外部連携機能を追加できる。これにより、企業やプロジェクトのニーズに合わせたカスタマイズが可能となる。
加えて、外部IDプロバイダーとの連携が簡単に行える点も大きなメリットとなる。GoogleやFacebook、Twitterといったソーシャルログインの導入や、SAML、OpenID Connectといった標準規格を用いた外部認証基盤との統合も、設定のみで実現できるため、システム間の認証連携をスムーズに進めることができる。
これらの特長により、Keycloakは多くの企業や開発現場で広く採用されるものとなっている。
具体的な利用方法
以下に、Keycloakの具体的な利用方法について述べる。
ユースケース①:WebアプリケーションでSSOを実現する
目的: 複数のWebアプリ(例:管理画面、ユーザーポータル、APIなど)を1回のログインで使い回したい
構成
- Keycloak(認証サーバー)
- Webアプリ(React, Vue, Django, etc.)
- Keycloak JavaScript Adapter または OIDCクライアント
手順
- Keycloakを起動
docker run -p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:latest start-dev
- 管理画面にログイン
- http://localhost:8080
- admin / admin
- Realmを作成
- 例:
my-realm
- 例:
- クライアント(アプリ)を登録
- クライアント名:
my-web-app
- クライアントタイプ:
public
- Redirect URI:
http://localhost:3000/*
(Reactアプリ等)
- クライアント名:
- ユーザーを作成
- ユーザー名:
testuser
- パスワード設定
- ユーザー名:
- アプリにKeycloak JS Adapterを追加
- 例(Reactの場合):
npm install keycloak-js
- アプリコードにKeycloak初期化を追加
import Keycloak from 'keycloak-js';
const keycloak = new Keycloak({
url: 'http://localhost:8080',
realm: 'my-realm',
clientId: 'my-web-app'
});
keycloak.init({ onLoad: 'login-required' }).then(authenticated => {
if (authenticated) {
console.log("ログイン成功", keycloak.token);
// アプリのメイン処理
} else {
console.log("ログイン失敗");
}
});
ユースケース②:REST APIへのアクセス制御(JWT)
目的: バックエンドAPI(Flask, FastAPI, Springなど)へのアクセスをJWTトークン認証で制御する
手順
- 上記と同様にクライアントを設定(タイプ:
confidential
) - トークンの取得方法:
curl -X POST http://localhost:8080/realms/my-realm/protocol/openid-connect/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=my-api-client" \
-d "username=testuser" \
-d "password=xxxxx" \
-d "grant_type=password"
- 取得した
access_token
をAPIに付けてアクセス:
curl -H "Authorization: Bearer <access_token>" http://localhost:8000/api/secure-data
- API側ではトークンを検証する
- Pythonなら
python-jose
,authlib
などでJWTを検証
- Pythonなら
ユースケース③:Googleアカウントでログイン(ソーシャルログイン)
目的: Keycloakログイン画面で「Googleでログイン」ボタンを出す
手順
- Google Developer ConsoleでOAuthクライアントを発行
- リダイレクトURI例:
http://localhost:8080/realms/my-realm/broker/google/endpoint
- リダイレクトURI例:
- Keycloak管理画面でIdentity Provider > Google を追加
- クライアントID / シークレットを入力
- クライアント設定で「Googleログインを許可」
ユースケース④:外部LDAP / Active Directoryと連携
目的: 企業のユーザー情報をKeycloakに統合してSSOに使う
手順
- 管理画面 > User Federation > LDAP を選択
- 接続情報を入力(ホスト、ポート、バインドDN、ベースDNなど)
- 同期設定:定期的に自動同期することも可能
活用ユースシーン
Keycloakの活用ユースシーンについて述べる。
1. 社内システムのシングルサインオン(SSO)統合
ユースケース: 企業が複数の社内Webシステム(勤怠、経費、在庫、CRMなど)をKeycloakで一元管理し、1回のログインで全てのアプリにアクセス可能にする。
利用技術:
-
- Keycloak + LDAP(Active Directory)連携
- SAML / OpenID Connectで各アプリ連携
2. 顧客向けWebサービスのログイン基盤
ユースケース: Webサービス(例:ECサイト、SaaSサービス)で、Keycloakを使ってユーザー登録、ログイン、パスワードリセットなどの機能を実装。
特徴:
-
- 独自の認証システムを作る手間が省ける
- ソーシャルログイン(Google, Facebookなど)対応も容易
3. モバイルアプリの認証連携(iOS / Android)
ユースケース: モバイルアプリにOAuth2/OIDCトークンベースの認証を導入し、Keycloakと連携。
技術構成例:
-
- React Native + AppAuth + Keycloak
- トークンによるAPIアクセス制御(認可)
4. APIゲートウェイとの連携(BFF構成やAPI管理)
ユースケース:
-
- APIバックエンドへのアクセスにJWTトークンを利用
- Kong / Apigee / Amazon API Gatewayと連携して、Keycloakでトークン発行・検証
目的:
-
- クライアント認証+スコープベースのアクセス制御
- クレデンシャル漏洩対策
5. マルチテナント環境のアイデンティティ管理
ユースケース:SaaS提供企業が、顧客(企業A, B, C)ごとにログインユーザーとポリシーを分けて管理したい。
機能:
-
- Realm単位で分離
- ユーザー属性やロールを柔軟に設定
6. ゲーム・コミュニティサービスのユーザー認証
ユースケース:ゲームやコミュニティプラットフォームで、ユーザーログイン・ロール・アバターなどの管理を一元化
特徴:
-
- デバイスIDログイン、ゲストユーザーの後から登録も可能
- REST APIでユーザーデータを取得・更新
7. 教育システム(LMS)の認証連携
ユースケース: Moodleや学習管理システムと連携して、Keycloakによるログインを導入
構成例:
-
- SAML / OIDC連携で、大学の統合認証基盤(Shibboleth等)とも接続
- 役職(先生・生徒)に応じたロール制御
8. 医療情報システムのアクセス管理
ユースケース: 医師・看護師・事務職員ごとに、アクセスできる患者情報やシステム機能を制限したい。
特徴:
-
- 高いセキュリティ(2段階認証やロールベース制御)
- 監査ログやトークン制御が可能
9. 開発中アプリの認証テスト基盤
ユースケース:開発段階で簡易なSSO/認可サーバーとしてKeycloakを活用。Dockerで簡単に起動して、テストに使う。
10. 外部IDプロバイダとの統合ハブ
ユースケース:複数の外部サービス(Azure AD, Okta, Google)と連携し、Keycloakをアイデンティティハブとして利用。
参考図書
日本語の参考書籍・資料
- 実践 Keycloak & SAML モダン認証システムの構築と展開: セキュアでスケーラブルな認証システムを手軽に!
-
Keycloak – Identity and Access Management for Modern Applications
-
公式オンラインドキュメント(英語)
-
バージョン別の機能・設定・CLI操作を網羅
GitHub上の実装例
コメント