Keycloak〜SAMLにも対応したシングルサインオン〜
最近、企業が多くのクラウドサービスを利用するようになっています。様々なサービスプロバイダが提供するクラウドサービスでは、それぞれに独自のユーザ名とパスワードによる認証があります。そのため、ユーザは多くのパスワードを使い分けなければなりません。このような状況の中、シングルサインオンの仕組みやソフトウェアが注目されています。サービスの中には、シングルサインオンの仕組みを利用して、IdPと呼ばれるIDプロバイダと連携できるものも出てきました。
このIdPに利用できるソフトウェアとして注目されているのが、Keycloakです。ここでは、Keycloakの機能や特徴について解説します。
- +
目次
Keycloakとは
Keycloakは、様々なアプリケーションやサービスへのサインインを一度でおこなうことができるオープンソースソフトウェアです。KeycloakはRedhatにより開発され、Apache License version 2ライセンスの下で公開されています。Keycloakは、OpenAMなどの他のSSOのオープンソースソフトウェアと比較すると非常に新しいソフトウェアです。
Keycloakは、OpenID ConnectやSAMLなどのシングルサインオンのプロトコルに対応し、IdPとして利用することができます。Keycloakでは、認証バックエンドとしてActiveDirectoryを利用できます。そのため、KeycloakをIdPとして導入することで、Windowsログインで使っているIDとパスワードをそのままインターネット上のサービスでも利用できるようになります。
Keycloakの特徴
シングルサインオンと認証の仕組み
シングルサインオン(SSO:Single Sign On)とは、一回の認証を行うだけで様々なシステムが、利用可能になる技術のことです。Keycloakは、多くのソフトウェアで使用されているSAMLやOIDC(OpenID Connect)、OAuth 2.0のプロトコルに対応しているため、多くのアプリケーションのSSOを実現できます。
例えば、SAMLを使ってクラウドサービスと連携する場合には、Keycloakは次のように動作して認証を行います。
- ユーザがサービスにアクセスします。
- サービスプロバイダは、認証済みかどうかを調べ、認証していなければKeycloakのURLを調べます。
- サービスプロバイダは、ユーザにKeycloakのURLを返送します。
- ユーザのブラウザは、KeycloakのURLに自動的にリダイレクトされます。
- ユーザは、Keycloakに認証を依頼します。
- Keycloakは、ユーザの認証状況を調べ、まだ認証済みでなければ認証処理を行います。
- 認証が成功するとKeycloakは、認証トークンをユーザに返送します。
- ユーザのブラウザは、サービスプロバイダに自動的にリダイレクトされます。
- ユーザからサービスプロバイダに、Keycloakが発行した認証トークンが送られます。
- サービスプロバイダは、認証トークンを検査します。
- 認証トークンが正しければ、ユーザはサービスを利用できるようになります。
このフローからも分るように、サービスプロバイダと連携してKeycloakは認証の処理のみを行います。認証の処理では、ソーシャル連携やActiveDirectory/LDAPとの連携を行うこともできます。
ソーシャル連携
Keycloakは、ソーシャルサービスの認証機構を利用することもできます。つまりGoogleやTwitter、Facebookなどの認証を利用してサインインを実装することができます。対応しているプロバイダは次の通りです。
- GitHub
- Microsoft
- PayPal
- OpenShift v3
- Gitlab
- BitBucket
- StackOverflow
またSAMLやOpenID connectを実装しているプロバイダであれば、連携が可能です。
アカウント管理システムとの連携
Keyclockは、既に存在するActiveDirectory/LDAPのユーザ情報を利用できます。ActiveDirectory/LDAPを使って認証するだけでなく、登録されているユーザ情報を別のアプリケーションに渡すこともできます。
Keycloakの動作環境
Keycloakは次の環境で動作します。
- Java 8 JDK
- zip or gzip or tar
- MySQL/PostgreSQL
なお、Keycloakの公式なDockerイメージは配布されていない。しかし、JBossプロジェクトが配布しているJBoss/KeycloakのDockerイメージが公開されていて、Dockerコンテナ環境でも利用することができる。
Keycloakの認可方法
Keycloakは、次のような仕組みに対応しています。
- SAML
SAML(Security Assertion Markup Language)とは、シングルサインオンで利用されるマークアップ言語/規格です。通常の認証の場合、ユーザが、システムやサービスと一対一で認証が行われます。SAMLを利用した場合は、システムやサービス(SP)と認証プロバイダ(IdP)を介して認証が行われます。
- OpenID Connect
OpenID Connect(OIDC)は、OAuthと呼ばれる認証方式にユーザのID情報を載せられるようにした規格です。OpenID Connectでは、トークンと呼ばれる記号を使い、アクセスの認可やID情報のやりとりを行うのが特徴です。OAuthは、TwitterなどのSNS認証でよく利用される方式であり、昨今の開発者には馴染みのある規格です。OpenID Connectでは、サービスやアプリケーションのことをRelying Party(RP)と呼びます。このRP側でOIDCは比較的実装しやすく、今後広まっていく可能性があるプロトコルです。
- OAuth 2.0
OAuth 2.0では、クライアントは、リソースオーナーにアクセストークンを発行してもらい認証を受けます。アクセストークンには、権限の範囲と期間が設定されていおり、アプリケーションやサービスに渡すことで、認証を行います。OAuth 2.0は認証だけを行うため、ユーザの個別情報を伝達する仕組みがありません。
Keycloakの機能
Keycloakの主な機能について説明します。
レルム管理
Keycloakでは、ユーザやロールなどを含むSSOに関わる設定をレルムという単位で管理することができます。レルムを分割することで、組織毎に利用可能なアプリケーションを分けたり、別のユーザDBを参照することができます。レルム毎に設定できる主な項目は次の通りです。
- ユーザ自身によるログイン情報の登録のON/OFF
- パスワード忘れ時の再発行機能のON/OFF
- 初回ログイン時にEメールで本人確認を行うか
- Eメールアドレスでのログインを許可するか
- WEBインタフェースのテーマ
- 言語設定
- セッションのタイムアウト時間
- ブルートフォースアタックの検知とブロック時間の設定
- SAML/OIDCクライアントの管理
- ロール管理
- アイデンティティプロバイダ連携
- ユーザフェデレーション
- ローカルユーザ・グループ管理
クライアント管理
Keycloakは、SAMLやOIDCでの認証設定を、クライアントという単位で管理します。クライアントの設定毎に、様々な設定が可能です。
- SAML/OIDCどちらを利用するか
- アプリケーションが利用する認証エンドポイント
- SSL関連の設定
- Keycloakが持つ属性とアプリケーションに渡す属性のマッピング
- ロール情報
アプリケーション毎に、クライアントの設定を行うことで、柔軟にSSOを実現することができます。
クライアントアダプタ
Keycloakプロジェクトでは、Keycloakと連携するためのプログラムライブラリを、クライアントアダプタとして配布しています。クライアントアダプタを使うことで、開発ソフトウェアをKeycloakと連携させることができます。クライアントアダプタとして公開されている主な環境は次の通りです。
|
|
|
|
アプリケーションにKeycloakのクライアントアダプタを組み込めば、シングルサインオン対応にすることができます。
また、プロキシサーバにKeycloakのクライアントアダプタを組むことでも、シングルサインオンを実現することができます。
ユーザフェデレーション
Keycloakには、既存のユーザDBと認証情報を統合するためのフェデレーション機能があります。ユーザフェデレーション機能は、LDAPまたはKerberosに対応しています。なお、Keycloakの内部DBにユーザやグループを作成することも可能です。
監査管理
Keycloakは、ユーザのセッションや、ログインなどのイベントを管理することができます。例として次のことが可能です。
- ユーザのセッションを強制的に切断する
- ログインしたユーザのログを参照する
この機能を利用することで、不正なユーザのアクセスを切断したり、怪しいユーザの動向を探ることができます。
KeycloakとOpenAM
Keycloakは、OpenAMと比べて非常にシンプルなソフトウェアです。
コミュニティの活動と将来性
OpenAMは、現在は商用ソフトウェアとして提供されています。そのため、オープンソース版の開発は行われていません。日本国内では、いくつかのベンダーが引き続きオープンソース版を元にサポートを提供しています。しかし、このような状態がいつまで続くのかは未知数です。
それに対して、KeycloakはRedHatが開発を行っているオープンソースソフトウェアで、コミュニティも活発に活動しています。Keycloakは、まだOpenAMに比べると機能が少ないですが、将来性を考えると安心して利用することができます。
機能の比較
OpenAMは非常に高機能です。そのため、Keycloakでは対応できない機能があります。
機能 | Keycloak | OpenAM | 備考 |
---|---|---|---|
エージェント型認証 | ◯ | ◯ | Keycloakではクライアントアダプタ |
プロキシ型認証 | ◯ | ◯ | |
SAML | ◯ | ◯ | |
OpenID Conenct | ◯ | ◯ | |
OAuth | ◯ | ◯ | |
代理認証 | × | ◯ | |
SNS連携 | ◯ | ◯ | |
LDAP連携 | ◯ | ◯ | |
ActiveDirectory連携 | ◯ | ◯ | |
OTP認証 | ◯ | ◯ | |
多要素認証 | ◯ | ◯ | |
アダプティブ認証 | × | ◯ | |
デバイスプリント認証 | × | ◯ | |
ユーザによるアカウント管理 | ◯ | ◯ | |
ユーザによるパスワード管理 | ◯ | ◯ | |
アクセス制御 | ◯ | ◯ | OpenAMはより高機能 |
「シングルサインオン(SSO)を構築するおすすめOSSとIDaaSの機能比較」へ
Keycloakと連携可能なサービス/ソフトウェア
Keycloakは、SAMLやOpenID Connectに対応したソフトウェアやサービスと連携が可能です。ここでは、デージーネットで検証済みのソフトウェアやサービスを紹介します。
- AWSマネージメントコンソール
Keycloakは、AWSマネージメントコンソールと、SAMLを使って連携することができます。
- Office 365
Keycloakでは、SAMLを使ってOffice 365とID連携をすることができます。ただし、組織内のActiveDirectoryのデータとID連携を行うためには、Azure ADと組織内のActiveDirectoryが連携し、さらにOffice 365とAzure ADが連携する必要があります。また、IdPから渡されるユーザ情報ややカスタムドメインに設定されている情報には、いくつかの制約があり、設定は比較的難易度が高くなっています。
- G Suite
Keycloakでは、SAMLを使ってG Suiteとの連携が可能です。G SuiteとのID連携は認証のみです。ユーザ情報は個別にG Suiteに登録する必要があります。また、G Suiteに登録されたユーザのメールアドレスは、Keycloak側の情報と同一でなければなりません。
- Slack
Keycloakは、SlackとSAMLを使ってID連携をすることができます。Slackサービスは、プラスプランまたはEnterprise Gridプランの契約が必要です。
- LINE WORKS
Keycloakは、LINE WORKSとSAMLを使ってID連携をすることができます。LINE WORKSは、ライトプラン以上の契約が必要です。LINE WORKSのSSOは、認証のみであるため事前のユーザ登録が必要です。
- Redmine 3.X
Redmineは、OSSのプロジェクト管理ソフトウェアです。Redmineの標準ではSSOの機能は存在しませんが、Redmine 3系では、omniauth_samlプラグインを利用することで、SAMLを使ってKeycloakとID連携が可能です。
なお、Redmine 3系には、OpenID Connectのプラグイン(redmin_openid_connect)も存在します。しかし、不具合があり、KeycloakとOpenID Connectでの連携はできません。また、Redmine 4系にはプラグインがなく、Keycloakとの連携はできません。
Keycloakのインストール
インストール方法や操作方法など詳しい情報は、「Keycloak調査報告書」からダウンロードすることができます。
デージーネットの取り組み
デージーネットは、ISPのシステム構築などで、システムの二重化、認証サーバの構築やサポートの実績を数多く持っています。デージーネットでは、Keycloakを使ったシングルサインオンシステムの構築とサポートのサービスを提供しています。Keycloakだけでは要件を満たせない場合には、OpenAMベースの製品を利用するなど、ケースに合わせて最適なソフトウェアをお勧めしています。
Keycloak〜SAMLにも対応したシングルサインオン〜「情報の一覧」
OpenAM〜シングルサインオン〜
OpenAMとは、シングルサインオン(SSO)を実現することのできるオープンソースソフトウェアです。OpenAMは、Sun Microsystemsが開発した製品をOpenSSOとしてオープンソース化したものです。
シングルサインオン(SSO)を構築するおすすめOSSとIDaaSの機能比較
クラウド上のサービスを利用する機会が増加したことにより、最近になってシングルサインオンが再注目されています。ここでは、主な選定のポイントについて解説します。
Keycloak調査報告書
Keycloakは、シングルサインオンを実現するための認証プロバイダです。SAMLとOpenID Connectに対応するソフトウェアと連携ができます。本調査報告書では、Rocket.chatとApache HTTP Serverのoidcモジュールとの連携方法を調査した結果を解説しています。