Keycloakは、複数のアプリケーションやサービスへのログインを一度で行う、シングルサインオン(SSO;Single Sign On) 機能を提供する為に、Red Hat社が開発したJavaベースのオープンソースのソフトウエアです。
SAMLやOIDC認証に対応のWebアプリケーションの場合には、簡単にKeycloakとSSOの構成を組むことができます。
![]()  | 
![]()  | 
ただし、すべてのWebアプリケーションがSSOに対応しているわけではありません。従来から運用のWebアプリは、SSOに対応していないことがほとんどです。
その場合、既存WebのSSO化への対応方法は2通りあります。
| 既存WebのSSO化 | 対応策 | 
| Webの改修で対応 | WebをSAML / OIDC 認証へ対応させる改修を行う *1 | 
| Webは未改修で対応 | SAML / OIDC認証のリバースプロキシ経由の代理認証を行う | 
*1 クライアントアダプターなどをWeb側に組み込む改修が必要です
リバースプロキシでSSO
既存の「SAML / OIDC認証に未対応のWebアプリ」を Keycloakと連携してシングルサインオンで運用する場合には、リバースプロキシを利用することで「既存Webの改修不要」でSSOに対応させる方法をとることができます。
Keycloakで代理認証を実現するには、KeycloakとSAMLやOIDC認証で連携するID認識型のリバースプロキシを経由して、既存のWebシステムへ 「ID / パスワード」 などのユーザー情報を代理入力&代理認証を行いSSOを構成します。
共有アカウントでSSO
また、複数のユーザーで同一のアカウントを利用する 「共有アカウント」 でWebアクセスする際の認証についても、代理認証を利用してのSSO対応が可能です。
代理認証でのシングルサインオン
![]()  | 
| SAML / OIDC認証に未対応のWeb | 
社内のSAML / OIDC認証に未対応の「ID / パスワード認証」のWebサーバーへ、Keycloak / idP 連携のリバースプロキシで代理認証を行いSSOでアクセスさせます。
代理認証
SAML/OIDC認証対応のリバースプロキシからWebへ「ID / パスワード」を代理入力&代理認証
- ユーザー操作でのWebへの「ID / パスワード」の入力不要
 - SAML / OIDC認証に未対応のWebをSSOのメンバーとして構成
 
![]()  | 
![]()  | 
Keycloak連携の代理認証対応のリバースプロキシ経由でWebへSSO
SAML認証やOIDC認証に「未対応のWeb」や「レガシーなWeb」を
- シングルサインオンのメンバーとして構成
 - バックエンドの「Webシステム」は 改修不要 *1
 - バックエンドの「Webシステム」は LAN / WAN / DMZ の任意の場所に設置
 
で運用できます
*1 サードパーティのWebアプリやサービスも改修不要でSSOに対応できます
SSOでの必要な機器構成
- idP / Keycloak
 - SAML / OIDC認証機能の代理認証対応の リバースプロキシ( ユーザー情報の代理入力機能 )
 - 既存Web ( Webの改修不要 / エージェント不要 )
 - ブラウザ( プラグイン不要 )

 
idP / Keycloak
- 一般的なKeycloakを利用できます
 - KeycloakとリバースプロキシはSAMLやOIDC認証で接続します
 
![]()  | 
![]() ![]()  | 
Keycloakのアプライアンス 
「Powered BLUE for idP 」も利用できます
Keycloakアプライアンスの機能
- ウィザードによるKeycloakのセットアップ
 - DB設定(シングル・クラスター構成)
 - Keycloak のリバースプロキシ構成
 - バックアップ、リストア、アップグレード
 - SSLサーバー証明書登録 ( トラストストア対応 )
 - keycloak へのアクセスポート( 80 / 443 )
 - アクティブモニタ(サービス監視・再起動・管理者への通知)
 - SSLクライアント認証
 - GUIからの操作設定
 
代理認証対応の リバースプロキシ・アプライアンス
SAML / OIDC認証に対応の代理入力機能のID認識型リバースプロキシ
「Powered BLUE ReverseProxy for SSO / IDaaS」
で構築運用します。
アプライアンスの機能としては
- リバースプロキシ機能
 - SAMLやOIDC認証(SP / RP 機能)
 - バックエンドWebへユーザー情報の代理入力機能
 - バックエンドWebへHTTPヘッダーでのユーザー情報の転送機能
 - SSLクライアント認証
 - GUIからの操作設定
 
代理入力・SSOでの認証ステップ
- 代理認証対応のリバースプロキシへアクセス
 - 初回のみ idP / Keycloak へアクセス
 - Keycloak の認証後にリバースプロキシからバックエンドWebへユーザー情報を代理入力
 - バックエンドのWebへ自動ログイン
 
各種WebへのSSO
一度のidP / Keycloakの認証で、複数のWebシステムへのシングルサインオン
KeycloakとActive Directory連携でのSSO
Active DirectoryとKeycloakを連携
- keycloakとActive Directoryの連携
 - Keycloakとリバースプロキシは、SAML / OIDC認証
 - リバースプロキシとWebは代理認証
 
Keycloakの多要素認証( MFA)
![]()  | 
SSLクライアント認証でidPやリバースプロキシへの認証を強化
- idPとのSAML / OIDC認証
 - SSLクライアント認証
 
| クライアント証明書 〇 | クライアント証明書 ✕ | 
Keycloakではワンタイムパスワード認証も利用が出来ます。
- ワンタイムパスワード認証は、毎回の「入力操作」が必要
 - SSLクライアント認証は、SSLクライアント証明書を一度インストールすると操作は不要
 
多要素認証の比較
| 認証 | SSLクライアント認証 | ワンタイムパスワード認証 | 
| 認証操作 | 不要 | 毎回必要 | 
| 判定のタイミング | ID / passwd 入力前に判定 | ID / passwd 入力後に判定 | 
| リスト攻撃 | ブロック 〇 | ブロック ✖ | 
共有IDや特権IDでのSSO
例えば、取引先の会社で提供するサービスのアカウントを総務部で共有する場合、Keycloak連携の代理認証対応リバースプロキシを利用することで、Webアプリは改修不要で「共有アカウント」のSSOを実現します。
複数人で同じアカウント情報を共有するケースでは、SSOに対応することで
- セキュリティを強化
 - トレーサビリティの強化
 - ユーザーの負担軽減
 
を図ることが可能です。
共有アカウントでWebアプリをSSOで構成する場合の要件
- Keycloak / idP ではユーザーごとの個人認証
 - 既存のWebアプリは「共有アカウント」を利用
 - 既存のWebアプリは、改修不要でSSOに対応
 - アカウントは 「N:1 」 や 「N:M」での紐付け
 - ユーザーには、Webアプリへの ID / パスワードの入力をさせない
 - ユーザーには、Webアプリの ID / パスワードを公開しない
 - ブラウザのみでの利用(プラグイン不要)
 - 多要素認証に対応
 - 利用状況や利用者を特定できること
 
idP連携のリバースプロキシから代理認証で共有アカウントへSSO
ID / パスワード認証の共有アカウントの「既存のWebサービス」を
- SAMLやOIDC認証のシングルサインオンのメンバーとして構成
 - バックエンドの「Webサービス」は 改修不要 *2
 - バックエンドの「Webサービス」は LAN / WAN / DMZ の任意の場所に設置
 
に対応で運用する構成です。
*2 サードパーティ製 Webアプリ や他社の サービス も改修不要で共有アカウントのSSO対応
既存の認証方法とSSOの併用
アクセス元により認証方法を変えることも出来ます。
- 従来の ID / パスワード認証(社内からのアクセス)
 - idP / IDaaS 連携によるSSO(社外からのアクセス)
 
の併用などの柔軟な運用が可能です。
| ID / パスワード認証 | SSO | 
Keycloakと代理認証対応リバースプロキシでの構成時のポイント
![]()  | 
![]()  | 
- Keycloakで代理認証を構成できる
 - SAMLやOIDC認証に未対応のWebアプリを改修不要でSSO化できる
 - ユーザーからの Webアプリの ID / パスワード入力不要
 - ユーザーへの Webアプリの ID / パスワード公開不要
 - Webアプリ の OS不問で導入
 - ターゲットWebを隠蔽できる
 - Webへ多要素認証を適用できる
 - 他のWebアプリとSSOでアクセスできる
 - 一般的なブラウザから利用できる(プラグイン不要)
 - 共有アカウントや特権アカウントでのSSOに対応
 - 既存の ID/パスワード 認証とSSO認証を併用できる
 
お問合せ
