Discourse インスタンスを SSO(SAML/Shibboleth 使用)で設定しており、同じ SSO を利用する別のサブドメインへのコンテンツ埋め込みを許可するように構成しました。
ここで発生している問題です:
- ユーザーがサブドメイン X のページを訪れ、そこにはサブドメイン Y でホストされている Discourse のトピックが埋め込まれています。
- ユーザーは SSO ログインのためにサブドメイン Z にリダイレクトされ、その後サブドメイン X に戻されます。
- サブドメイン X のページが JavaScript 埋め込みファイルを読み込み、フォーラムトピックを取得しようとする iframe を作成します。しかし、Discourse(サブドメイン Y)は iframe を SSO 用のサブドメイン Z にリダイレクトします。ユーザーは既にログインしているため、Discourse の埋め込み URL へ再度リダイレクトされます。ただし、これにより「Error Embedding」の 400 エラーが発生します。これは、リファラー URL が許可/ホワイトリストに登録されているサブドメイン X ではなく、SSO サブドメイン Z から来ているためです。Discourse は「The referer was either not sent, or did not match any of the following hosts」というメッセージを返します。
- ページをリフレッシュすると、すべて正常に動作します(つまり、フォーラムトピックが正常に読み込まれます)。おそらく、ブラウザに有効なセッションクッキーが存在するため、SSO サブドメインへのリダイレクトが不要になるためでしょう。
これを適切に修正する方法はありますか?現在、非常に厄介なハックを設定しています。まず、フォーラムトピックを非表示の iframe に読み込もうとし、1 秒待ってからユーザーに見える実際のページにトピックをロードするというものです。
ご助言やご提案をいただければ幸いです!