Keycloak SSOとログアウトの問題

こんにちは!
@david 助けてください、素晴らしい方です!))))

Discourse + Keycloak SSO + SAML プラグイン + OpenID Connect プラグインのバンドルを正常に設定しました。唯一、この美しさを台無しにしているのはログアウト処理です。

フォーラムからログアウトすると、ユーザーの認証が解除されます。この部分は問題なく動作しています。
その後、Keycloak のアクティブなセッションを確認すると、フォーラムからログアウトしたユーザーのセッションは削除されていません。

これはログアウト URL の設定が原因ではないかと疑っています。どこで設定すべきか(Discourse 側か Keycloak 側か)がわかりません。

Keycloak 側の SAML 設定:

Keycloak 側の OpenID Connect 設定:

OpenID Connect プラグインは RP 開始ログアウト をサポートしています。Keybase でもこれはサポートされていますか?

では、それが何か、そしてKeycloakに存在するかどうかを理解する必要がありますね))))
openid-connectプラグインでこのオプションはどこで設定されますか?

サイト設定で設定されています:

ありがとうございます!Keycloak がこの問題についてどう扱っているか、ググってみます。

はい!問題なく動作します!ただし、openid_connect_rp_initiated_logout_redirect 変数の設定が必要であることを明確にしておきます。

@david もう一つ質問があります。重要な質問です。
現在、Keycloak SSO の最終テスト段階にあり、SAMLOpenID Connect のどちらのプロトコルを採用するか選択する必要があります。
私は OpenID Connect の方が気に入っていたのですが、現在、OpenID Connect を使用した新規ユーザー作成時に厄介な問題が発生しています。

問題を理解するために、別の側面から説明します。SAML を使用して新しいフォーラムユーザーが作成される場合、ユーザーは SSO で作成され、Discourse への作成が透過的に実行されます。そして、即座にアクティブ化されます——これが重要です!
つまり、Discourse フォーラムで「サインアップ」をクリックすると、Keycloak に移動し、そこでユーザーを作成してメールを確認などの手順を踏みます。その後、Discourse フォーラムに戻ると、ユーザーはすでに作成され、アクティブ化されています:

しかし、OpenID Connect プラグインを使用すると、新規ユーザー作成時に以下のウィンドウが表示されます:

これは非常に不便です!なぜでしょうか?SSO でアカウントを作成する際にすでにユーザーのメールは確認済みなのですから。このウィンドウを回避する方法はありますか?

あらかじめ大変ありがとうございます!

もしそのメッセージが OpenID Connect で表示されている場合、アイデンティティプロバイダーが Discourse に email_verified: false というメッセージを渡したことを意味します。詳細なデバッグ設定を有効にすると、すべての認証データが /logs に出力され、確認できるようになります。Keycloak 側で検証状態を正しく渡す方法があることを願っています。

それなら、なぜ SAML プラグインはこの点を無視するのでしょうか?

SAML プラグインでは、これは saml_default_emails_valid グローバル設定(デフォルトは true)で制御されます。

解決策を見つけました!))))
Keycloakでは:

これらのオプションを無効にしてください:

Keycloak がメールアドレスを検証したことが 100% 確実であれば問題ありません。検証されていない場合、その操作は Discourse サイトを攻撃者に狙われるリスクにさらします。

はい、その通りです…
さて、新しいケースをテスト中 — 1 つの Keycloak OpenID クライアントで 2 つのフォーラムです ))

ところで、@david さん、どちらがより適切だと思いますか:

  1. 全てのフォーラムで 1 つの OpenID クライアントを使用し、必要な有効なリダイレクト URL を指定する(現在の設定):


  2. それとも、フォーラムごとに独自の OpenID クライアントを使用する?

Keycloakについては詳しくありませんが、どちらのアプローチでも問題ないと思います。後ほど、各フォーラムごとにアクセス制御を分けたくなった場合、それぞれを別クライアントとして設定しておくと、その対応がしやすくなるかもしれません :man_shrugging: