Discourse-saml はマルチサイト互換ではありません

新規に設定された Discourse インスタンスでは、デフォルトの Content-Security-Policy がフォームを送信するスクリプトを拒否するため、SAML が失敗します。

CSP と SAML プラグインを正常に使用している多くの顧客をホストしています。ブラウザコンソールに表示されているエラーについて共有していただけますか?

当社のホスティングはすべて CDN を使用しているため、CDN を使用していないユーザーに対して CSP ルールが機能していないのではないかと推測しています。

「いいね!」 1

はい、申し訳ありません。以前はそうする予定でしたが、エラーメッセージを再現できず、それでもエラーは残っています。
現在は favicon と apple icon で「mixed content」エラーのみが発生しています。これらの画像は force_https がチェックされる前にアップロードされましたが、この設定ですべてのアイコンのソースを処理すべきだと考えています。これはバグでしょうか?

以前発生した元のエラーを再現しようとしていますが、まだ成功していません。画面上に表示されるエラーは「Sorry, there was an error authorizing your account. Please try again.」です。無効なチケットが原因だと思われますが、Discourse と Keycloak の両側の設定は、既存の動作しているインスタンスと一致しています。奇妙です。

はい、すみません。以前はそうするつもりでしたが、エラーメッセージを再現できませんでした。ただし、エラーは残っています。

わかりました、エラーの原因を見つけました。設定に問題があるようです:

  1. マルチサイト環境で、ps.zoethical.org が「メイン」サイトであり、元々 SAML が設定されています。
  2. forum.zoonklopper.be インスタンスには SAML ボタンが表示されていますが、スコープは ps.zoethical.org に対して定義されています。
(saml) 認証失敗!invalid_ticket: OneLogin::RubySaml::ValidationError, https://ps.zoethical.org はこのレスポンスの有効な対象ではありません - 有効な対象: https://forum.zonnklopper.be

ps.zoethical.org を対象に追加すると、別のエラーが発生します:

(saml) 認証失敗!invalid_ticket: OneLogin::RubySaml::ValidationError, レスポンスは https://ps.zoethical.org/auth/saml/callback ではなく https://forum.zonnklopper.be/auth/saml/callback で受信されました

SAML プラグインはマルチサイトに対応していません。

「いいね!」 1

はい、それが私が今気づいたことです。非常に残念です。:frowning:

実際には、このプラグインの非互換性は以下のことを意味します:

  1. マルチサイト内の最初のサイト(または DISCOURSE_HOSTNAME で設定されたサイト)では動作します。
  2. ボタンは他のすべてのインスタンスのログイン UI に表示されます。
  3. しかし、それらのボタンは明確な解決策なしに失敗します。

discourse-saml に関する専用トピックが #plugin にないため、トピックを作成し、最初の投稿にこの注意点を含めることをお勧めします。SAML について言及されている 50 以上のトピック から、ある程度の統合が可能だと確信しています。これを事前に知っていれば、サービス設定を異なった方法で行っていたでしょう。

(余談ですが、元の CSP エラーは、iframe が現在のサイトではなく元のサイトを読み込もうとしていることが原因である可能性が非常に高いです。)

マルチサイトでの SAML ボタンの非表示

マルチサイトで SAML プラグインを有効にした人向けの簡易な修正です。:slight_smile:

  1. 管理画面 > テーマへ移動し、「新規インストール」を選択
  2. 新規コンポーネントを作成(名前:「Hide SAML Button」)
  3. CSS を追加:
    #login-buttons .btn.btn-social.saml {
        display: none; /* マルチサイトと非互換なプラグイン */
    }
    
  4. コンポーネントをすべてのテーマに適用

これで、このインスタンスでは動作しない SAML ボタンが表示されなくなります。

このトピックは3日後に自動的に閉鎖されました。新しい返信は許可されていません。