Keycloakを利用したSPNEGO:統合Windows認証によるシングルサインオン2019年9月25日Keycloakを利用したSPNEGO:統合Windows認証によるシングルサインオンKeycloakを利用したSPNEGO:統合Windows認証によるシングルサインオンの構築方法を説明する。1.概要Keycloakを用いた統合Windows認証(SPNEGO:Kerberos認証)によるシングルサインオン(SSO)の動作に関する説明である。Hatが開発したオープンソースソフトウェア(OSS)であり、SSOや認証・認可を行うアイデンティティアクセス管理ソフトウェアである。KEYCLOAKSPNEGOを用いることによりユーザID・パスワードを入力することなく、ドメインユーザでログインが完了する。統合Windows認証とはドメインにログイン済みのクライアント端末からブラウザ経由でKerberos認証(RFC4120)する仕組みである。RFC2478)と言う。以下、Keycloakを用いた統合Windows認証に関する認証フロー図である。ドメインログイン済みユーザがユーザID・パスワードの入力をせずにWebアプリケーションにログイン可能であることがわかる。4.環境構築設定手順1.keytabファイルの作成AD/KDC内のユーザ情報をkeytabファイルに出力し、Keycloakが読み込める状態にしておく必要がある。keytabファイルはAD/KDCのコマンドプロンプトに以下のコマンドを実行して生成する。(0x4424147a7dcd3c47c4ec3921443023bd)2.keytabファイル配置Keycloakサーバの任意のディレクトリに1.で生成したkeytabファイルを配置する。今回は以下のように配置した。/opt/keycloak/krb2.keytab3.Keycloakサーバの設定Kerberos認証を行うにはLinuxの場合/etc/krb5.confファイルを修正する必要がある。環境に合わせて以下の様にkdcやadmin_server、domain_realmを設定する。A-FRONTER2.LOCAL4.Keycloakクライアントの設定a.任意のレルムで「クライアント」の「作成」押下b.任意のクライアントIDを入力し「保存」押下c.クライアントが作成される。以上でクライアントの設定が完了。5.Keycloakユーザフェデレーションの設定a.任意のレルムで「ユーザーフェデレーション」の「プロバイダーの追加」「kerberos」押下b.以下の様に環境に応じた値を入力し「保存」を押下コンソール表示名:任意Kerberosレルム:ドメイン名サーバープリンシパル:keytabファイル作成時に指定したプリンシパルKeyTab:Keycloakサーバに配置したkeytabファイルの絶対パス以上でユーザーフェデレーションの設定が完了。6.keycloak.jsonのダウンロードと配置アプリのKeycloakアダプターを作成したクライアントに向けるためにkeycloak.jsonファイルをアプリに読み込ませる必要がある。JSON」押下d.「ダウンロード」押下e.ダウンロードしたファイルをWebアプリケーションのWEB-INF直下に配置する※keycloak.jsonの"auth-server-url"の値がIPアドレスになっているとSPNEGOが動かない。以下の様にFQDNに修正する。7.ブラウザの設定ブラウザからKeycloakに対してNegotiationヘッダを送信するための設定をする必要がある。250コマンドは正常に終了しました。今回はブラウザにGoogleChromeを使用するため以下から確認する。a.インターネットエクスプローラー起動b.「ツール」→「インターネットオプション」→「詳細設定」を選択c.「統合Windows認証を使用する」にチェックがついていること3.クライアント端末のGoogleChromeからWebアプリケーションにアクセスする。(認証フロー2)WebAPにアクセスすると統合Windows認証が動きアプリのログイン後画面が表示される認証画面が出力されずにログインが完了する。6.動作詳細確認クライアント端末でWiresharkを起動しパケットを見てみる。左の〇番号が認証フロー図と対応したパケットである。クライアント端末のチケット情報を確認する【ADへのログイン直後】(認証フロー1)以下の様に3つのチケットが確認できる。【Webアプリケーションログイン直後】(認証フロー22)以下の様にチケットが4つに増えている。増えたものがKerberos認証で要求、取得したHTTPサービスチケットだとわかる。