Keycloakの概要
Keycloak(キークローク)とは、Web上でのシングルサインオン(SSO)(※1)を実現するためのJavaベースのIAM (Identity and Access Management) のソフトウェアで、2014年にバージョン1.0.0がリリースされた、競合他社製品に比較すると後発のものとなります。Keycloakは、Red Hat JBossプロジェクトが開発を進めているOSS(オープンソースソフトウェア)であり、Apacheライセンスとしてソースコードが公開されています。Keycloakは、アプリケーションやサービスとの連携を目的としており、SAML、OpenID Connectに対応した認証・認可だけではなく、多要素認証やSNS認証、LDAP連携等の多くの機能が備わっています。
また、Red Hat社は、公式サブスクリプションの「Red Hat JBoss EAP」に付属する製品として(※2)、Keycloakをベースとした「Red Hat SSO」を販売しています。「Red Hat JBoss EAP」および「Red Hat SSO」の保守サポートやマイグレーションについても、弊社までお気軽にお問い合わせください。
※1 シングルサインオン (Single Sign-On:SSO) とは、複数の情報システムのユーザIDを統合管理し、利用するシステム毎にユーザID/パスワード等の入力による認証を必要とせず、一度だけの認証(一つのユーザIDとパスワード)で複数のシステムを利用できる仕組みです。シングルサインオンはユーザやシステム管理者の ID管理の手間を軽減するだけでなく、個人情報の漏洩防止やセキュリティ対策、アクセス制御を統合・強化といった観点からも現在多くの企業にとって欠かせないものになっています。
※2Keycloak 17.0.0からJBoss EAPではなく、Quarkusに付属する製品として提供されています。
Keycloakの業界標準仕様対応
Keycloakは、業界標準の、以下の仕様をサポートしています。
- SAML 2.0
標準化団体OASISによって策定された、IDやパスワードなどの認証情報を安全に交換するためのXML仕様です。歴史あるプロトコルのため、多くのアイデンティティ管理ベンダーによって実装されており、提供されているサービスやソフトウェアが多く、GoogleやSalesforceなどのクラウドサービス、学認(Shibboleth)などとの連携が可能です。 - OpenID Connect
標準化団体OpenID Foundationによって策定されたREST/JSONベースのプロトコルです。OAuth 2.0をベースに認証目的でも利用できるように拡張しています。野村総合研究所、グーグルなどにより開発が開始され、2014年2月に最終承認された現在最も新しいフェデレーションプロトコルです。グーグル、マイクロソフト、セールスフォースなど多くの企業がサポートしており、現在はデファクトスタンダードとなっています。 - OAuth 2.0
OAuth 2.0は仕様が簡略化され使いやすくなった次世代のOAuthプロトコルであり、クライアントとなるWebアプリ、デスクトップアプリ、スマートフォン、リビングデバイス等のクライアントプロファイルを仕様化しています。認証ではなく、認可(どのリソースにアクセスできるか)について規定している点で他のプロトコルとは異なります。Facebook、Google、Microsoftなどの多くの企業のさまざまなサービスで実装されています。
KeycloakとOpenAMの機能比較
OpenAMは、Keycloakと同じくシングルサインオンを実現するためのOSSであり、数多くの導入実績があります。KeycloakとOpenAMの機能比較は以下となります。
モジュール
機能
Keycloak
OpenAM
認証
多要素認証
○
○
ワンタイムパスワード
○
○
クロスドメイン・シングルサインオン認証
○
○
認可
ユーザ属性アクセス制御
○[1]
○
権限アクセス制御(ロール)
○[1]
○
その他アクセス制御
(URL、IPアドレス、時間帯)
○[1]
○
連携
各種フェデレーションへの対応
(SAML/OIDC/OAuth2.0)○
○
デスクトップ認証連携
○
○
代理認証連携
×[2]
△[2]
外部IDP認証連携
○
○
リスクベース認証
アダプティブ認証
(非常習アクセスに対する追加認証)
×
○
デバイスプリント認証
×
○
スクリプト認証
(事前定義を基に多要素認証へ切り替え)
×
○
セルフサービス
ユーザ自身によるアカウント登録
○
○
ユーザ自身によるパスワードリセット
○
○
ユーザ自身によるユーザ属性の変更
○
○
[1] Javaクライアントアダプタを利用していることが前提となります。
[2] 実装されていない機能のため、別途、個別のカスタマイズが必要となります。OpenAMは、OpenAMと連携可能なOpenIGというソフトウェアにより代理認証が実現できます。
Keycloakの主な機能
シングルサインオン機能
Keycloakで認証されたユーザは、Keycloakで管理したリソースに再度認証(パスワードを再入力)する必要なくアクセスできます。
<実現方式>
パターンA:アダプタ方式 | パターンB:リバースプロキシ方式 |
---|---|
連携システムのサーバ内に、シングルサインオンするためのモジュール(クライアントアダプタ)を組み込む方式です。 | ユーザからのアクセスを一度、クライアントアダプタを導入したサーバが受け、そのリクエストを連携システムへ中継する方式です。 |
![]() |
![]() |
フェデレーション(連携)機能
ID管理が独立した複数のサイト間でのシングルサインオンができる機能です。例えば、Salesforce CRM、Google Workspaceのような他社の異なるドメインのWebアプリケーションに対しても自分のID/パスワードでシングルサインオンが可能です。フェデレーションを実現するための、業界標準の認証プロトコル「SAML」や「OpenID Connect」に対応しています。また、KeycloakはFacebook、Google、Twitter等のソーシャルネットワーキングサービスや、既存のOpenID Connectプロバイダ、もしくはSAML 2.0プロバイダと連携させることで、それらに登録されているIDによりKeycloakにログインさせることが可能です。連携させるにはコードやアプリケーション側の修正は不要で、Keycloakの管理コンソールで設定を追加するだけです。
ID管理機能
Keycloakは以下の属性を管理できます。
ユーザ(User) | 認証(ログイン)単位です。 |
---|---|
グループ(Group) | ユーザを配属させることができます。 Keycloak内では、階層による管理が可能です。 |
ロール(Role) | 権限を表現したものです。 ユーザ・グループに付与することができます。 |
管理者は上記属性を一般ユーザに割り振る権限を持ちます。
イベントロギング機能
監査の目的で、ログインイベント(ログインやログアウト、メールアドレスの変更やパスワードリセット等の操作)と管理イベント(管理コンソール上で行った操作)を記録・閲覧することができます。
マルチテナント機能
Keycloakはレルムという単位ごとに設定を管理しています。レルムを複数作成することによりマルチテナントでの利用が可能です。
セルフサービス機能
ユーザ自身によるアカウント管理ができます。管理機能は以下の通りです。
- アカウントの登録
ログイン画面のリンクから新規ユーザ登録が可能です。 - パスワードリセット
ログイン画面のリンクからパスワード変更が可能です。入力したメールアドレス宛に送られたメールに記載されたリンクをクリックすることで登録が完了します。 - ユーザ属性の変更
自身のユーザ属性(ユーザ名やメールアドレス等)を変更することが可能です。
タイムアウト機能
システムを一定期間使用していない場合に、自動的にログオフします。
管理コンソール機能
Keycloakの管理コンソールにより、管理者は前述の機能を集中管理することができます。
Keycloakの主な特徴
Keycloakは、次のような特徴があります
高い安定性と信頼性 | 商用サポートあり | Keycloakには、商用製品のRed Hat SSOも提供されており、導入から運用までワントップでサポートします。 |
---|---|---|
汎用性 | Javaベース | KeycloakはJavaで開発されているため、多くの企業情報システム間でのシングルサインオン環境を構築できる汎用性がありま す。 |
拡張性 | マルチプラットフォーム | KeycloakはRed Hat Enterprise Linux、CentOS、Microsoft Windowsなどの様々なOSプラットフォームに対応しています。 |
様々な認証方式に対応 | 多要素認証やOTP(ワンタイムパスワード)認証、統合Windows認証など様々な認証方式と連携できます。 | |
SAML 2.0に対応 | Keycloakは国際標準の認証プロトコルSAML 2.0に対応しているため、同一の認証プロトコルに対応したSaaS系アプリ ケーション(例えばSalesforceやGoogle等)とも連携ができます。 | |
OpenID Connectに対応 | 野村総合研究所、Googleなどにより開発が開始され、2014年2月に最終承認された最も新しく、すでに多くのサービスで利用されているフェデレーションプロトコルに対応しており、各種SaaSサービスとのシングルサインオンにも対応が可能です。 | |
クロスドメイン・シングルサインオン | 複数のDNSドメインをまたがるシングルサインオンであるクロスドメイン・シングルサインオンに対応しています。 | |
SPI | JavaのSPI (service provider interface) という仕組みを利用して、標準では対応していないソーシャルプロバイダを追加したり、お客様固有の認証処理やユーザー・ストレージ、RESTエンドポイントなどを組み込んだりすることが可能です。 | |
柔軟性 | 顧客要件に応じた細かいカスタマイズが容易 | Webサーバやデータベースなどの基盤ミドルウェアと異なり、認証基盤には様々な顧客要件を組み入れる必要があります。例えば、連携先となる業務システムの認証方式や、ID管理の業務運用、IDデータの取り込み方式など、様々なパターンを個別設計する必要があります。OSSのKeycloakは、商用製品と比較して顧客要件に応じた細かいカスタマイズが容易であることが大きなメリットとなります。 |
長期利用 | 継続的な安定利用 | OSSは、商用製品のように開発企業の買収などによってサポートが打ち切られる心配が少ないと言えます。 |
Keycloakのユースケース(連携事例)
Keycloakは、SAML 2.0とOAuth 2.0/OpenID Connect 1.0を実装しており、これらのプロトコルを使って、様々なサービスやソフトウェアと連携することができます。
サービス、ソフトウェア名 | 連携プロトコル | ロール | カスタマイズ | 備考 |
---|---|---|---|---|
AWSマネージメントコンソール | SAML 2.0 | IdP | 不要 | |
Office 365 | SAML 2.0/ OpenID Connect 1.0 | IdP / OP | 不要 | |
Google Workspace(G Suite) | SAML 2.0 | IdP | 不要 | |
Slack | SAML 2.0 | IdP | 不要 | |
Onelogin | OpenID Connect 1.0 | OP | 不要 | |
Salesforce | OpenID Connect 1.0 | OP | 不要 | |
Box | SAML 2.0 | IdP | 不要 | |
JIRA | SAML 2.0 | IdP | 不要 | ※有償プラグイン利用 |
Confluence | SAML 2.0 | IdP | 不要 | ※有償プラグイン利用 |
Miro | SAML 2.0 | IdP | 不要 | |
AWS Console | SAML 2.0 | IdP | 不要 | |
Mattermost (Enterprise版) | SAML 2.0 | IdP | 不要 | |
NextCloud | SAML 2.0 | IdP | 不要 | |
GitLab | SAML 2.0 | IdP | 不要 | |
Datadog | SAML 2.0 | IdP | 不要 | |
PeerTube | OpenID Connect 1.0 | OP | 不要 | |
NextAuth.js (Next.js用の認証ライブラリ) | OpenID Connect 1.0 | OP | 不要 | |
AWS ALBのOIDC連携機能 | OpenID Connect 1.0 | OP | 不要 | |
HENNGE | SAML 2.0 | IdP | 不要 | |
NextSet | SAML 2.0 | IdP | 不要 | |
SeciossLink | SAML 2.0 | IdP | 不要 |
Keycloakとともに開発されているクライアントアダプターなどの連携用ソフトウェアを使用すれば、前述のプロトコルに対応していない以下と連携することもできます。
サービス、ソフトウェア名 | 連携ソフトウェア | 連携プロトコル | ロール | カスタマイズ | 備考 |
---|---|---|---|---|---|
Spring Bootベースのアプリケーション | Spring Bootアダプター | OpenID Connect 1.0 | OP | 必要 | |
Spring Securityベースのアプリケーション | Spring Securityアダプター | OpenID Connect 1.0 | OP | 必要 | |
Tomcat上で動作するWebアプリ | Tomcatアダプター | OpenID Connect 1.0 | OP | 必要 | |
Jboss/WildFly上で動作するWebアプリ | Jboss/WildFlyアダプター | OpenID Connect 1.0 | OP | 必要 | |
Jetty上で動作するWebアプリ | Jettyアダプター | OpenID Connect 1.0 | OP | 必要 | |
Fuse上で動作するWebアプリ | Fuseアダプター | OpenID Connect 1.0 | OP | 必要 | |
任意のサーブレットコンテナー上で動作するWebアプリ | Servlet Filterアダプター | OpenID Connect 1.0 | OP | 必要 | |
JavaScriptアプリ(クラアントサイド) | JSアダプター | OpenID Connect 1.0 | OP | 必要 | |
Node.js上で動作するWebアプリ | Node.jsアダプター | OpenID Connect 1.0 | OP | 必要 | |
Apacheのバックで動作するアプリ | mod_auth_openidc | OpenID Connect 1.0 | OP | 必要 | |
任意のWebアプリ | Gatekeeper | OpenID Connect 1.0 | OP | 必要 | |
任意のWebアプリ | OAuth2 Proxy | OpenID Connect 1.0 | OP | 必要 |
以下のサービスのアカウントを使ったログイン(ソーシャルログイン)を実現することもできます。
サービス、ソフトウェア名 | 連携プロトコル | ロール | カスタマイズ | 備考 |
---|---|---|---|---|
Bitbucket | OAuth 2.0 | クライアント | 不要 | |
OAuth 2.0 | クライアント | 不要 | ||
GitHub | OAuth 2.0 | クライアント | 不要 | |
GitLab | OpenID Connect 1.0 | RP | 不要 | |
OpenID Connect 1.0 | RP | 不要 | ||
OAuth 2.0 | クライアント | 不要 | ||
Microsoft | OAuth 2.0 | クライアント | 不要 | |
OpenShift 3 | OAuth 2.0 | クライアント | 不要 | |
OpenShift 4 | OAuth 2.0 | クライアント | 不要 | |
PayPal | OpenID Connect 1.0 | RP | 不要 | |
Stack Overflow | OAuth 2.0 | クライアント | 不要 | |
OAuth 2.0 | クライアント | 不要 | ||
OAuth 2.0 | クライアント | 不要 | ||
LINE | OpenID Connect 1.0 | RP | 必要 | |
Azure AD | SAML 2.0 | SP | 必要 | |
ADFS | SAML 2.0 | SP | 必要 |
以下のユーザーストレージと連携することもできます。
サービス、ソフトウェア名 | 連携プロトコル | カスタマイズ | 備考 |
---|---|---|---|
Active Directory | LDAP | 不要 | |
Red Hat Directory Server | LDAP | 不要 | |
Tivoli Directory Server | LDAP | 不要 | |
Novel Directory | LDAP | 不要 | |
その他LDAPサーバー | LDAP | 一部必要 | |
任意のRDBMS | SQL | 必要 |
他にも多数のサービスやソフトウェアと連携することができます。
Keycloakの動作環境
参照:https://www.keycloak.org/docs/latest/securing_apps/index.html#supported-platforms
ハードウェア
・RAM 最低512M以上
・HDD 最低 1GB以上
プラットフォーム
・Javaが動作するOS(Linuxや
Windows等)
Java
・Java 11以上
データストア
・Active Directory(およびKerberos)
・LDAP
クライアントアダプタ対応Webコンテナ
OpenID Connect
・Apache Tomcat 7, 8, 9
・Fuse 6, 7
・JBoss Enterprise Application Platform 6, 7
・Jetty 9.2.x, 9.3.x, 9.4.x
・Servlet Filter
・Spring Security (community)
・Spring Boot (community)
・WildFly 9以上
・JavaScript
・Node.js
・JavaScript
・Keycloak Connect (community)
・Keycloak Auth Utils (community)
・Keycloak Gatekeeper
・OWIN (community)
・python-opneid (generic)
・AppAuth (generic)
・AeroGear (generic)
・AppAuth (generic)
・AeroGear (generic)
・mod_auth_openidc
SAML
・Apache Tomcat 7, 8, 9
・JBoss Enterprise Application Platform 6, 7
・Jetty 9.x
・WildFly 9以上
・mod_auth_mellon
Keycloakのライセンス
Keycloakは、Apache 2.0ライセンスです。Apache License(アパッチ・ライセンス)のコードが使用されていることの明記を条件に、ソースコードの自由な改変と公開が認められています。Keycloakのライセンスについてご不明な点がありましたら、お気軽にお問い合わせください。
Keycloakのダウンロード
Keycloakダウンロードページ
(リンク:http://www.keycloak.org/)
関連OSS
OpenAM
(リンク:https://openstandia.jp/oss_info/openam/index.html)
Keycloakのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。