Windows AD への Kerberos 統合によるユーザー フェデレーションを使用したブラウザーと Keycloak 間の SSO が機能しない

Windows AD への Kerberos 統合によるユーザー フェデレーションを使用したブラウザーと Keycloak 間の SSO が機能しない

ブラウザ (Chrome または Firefox) と、ユーザー フェデレーション AD ドメイン (Kerberos が構成されている) で構成された Keycloak を使用して SSO を機能させようとしています。

まず、私が持っているものの概要を示し、その後に詳細を追加します。

概要:
認証エンドポイント「.../auth/realms/test_realm/protocol/openid-connect/auth」を呼び出し、tcpdump を使用すると、次のようになります。

  1. ブラウザは必要なパラメータを含むgetリクエストを認可エンドポイントに送信する

  2. Keycloak は正しく応答します:
    - 401 Unauthorized
    - ヘッダー "WWW-Authenticate: Negotiate"

  3. ブラウザは、新しい GET リクエストを正しく送信します:
    -with "Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAAKAGFKAAAADw=="
    これは spnego トークンを送信しています

  4. Keycloakは「200 OK」で応答しますが、ログインページがあり、トークンやコールバックURLがないため、Keycloakログにエラーはありません。

Q: ここでKeycloakはどのような応答をするのでしょうか? 次のようなクッキーをコールバックURLに送信する必要があります。キークロークIDそしてキークロークセッションですよね?この Cookie を使用すると、トークン エンドポイントを呼び出して、アプリケーションで使用するトークンを取得できます。

Q: 何が足りないのか分かりますか? たくさんの部品があることは分かっていますが、何か明らかなものが足りないのかもしれません。

手動ログインを行うときは、トークン エンドポイントを呼び出してトークンを取得するために使用できる Cookie KEYCLOAK_IDENTIT および KEYCLOAK_SESSION を返す login-actions/authenticate エンドポイントを呼び出します。
テスト ドメインからログインしたユーザーと同じユーザーを使用しているため、keycloak がテスト対象ユーザーを認証できることがわかります。


さらに詳しい情報

Keycloakの設定には、以下の公式ドキュメントに従いました。https://www.keycloak.org/docs/latest/server_admin/

Windows クライアント マシン (ブラウザーは Chrome または Firefox、両方テスト済み):
- URL をホワイトリストに追加しました
- 必要なパラメーターを使用して認証エンドポイントを呼び出しています

Windows Server 2019 AD ドメイン
- 次を使用してキータブ ファイルを作成しました:
ktpass /out testdomainlocal_keytab_file.keytab /princ HTTP/[メールアドレス]/mapuser keycloak_kerberos /pass "somepass" /crypto All /ptype KRB5_NT_PRINCIPAL /kvno 1
- ユーザー keycloak_kerberos はテストドメインに存在します

Linux rhel8.8 には、keycloak 22.01 があります
- 「realm join」を使用して Linux マシンをテスト ドメインに追加しました -
ldap テスト ユーザーを手動で認証できる LDAP AD のセットアップ ユーザー フェデレーションを追加しました -
AD マシンから作成されたプリンシパルとキータブを使用して Kerberos 統合をアクティブ化しました
- ドメイン情報を /etc/krb5.conf ファイルに追加しまし

た 必要に応じて詳細を表示できますが、情報を匿名化する必要があります。

関連情報