Townnews のサイトへの SSO 設定を行った方はいますか?
Townnews や BLOX CMS を使用し、Discourse SSO と連携しているサイトは存じ上げません。そのサービスを利用しているサイトにコードを追加することは可能でしょうか?もし Discourse SSO のコードをそのサイトに追加できるのであれば、Discourse の SSO プロバイダーとして利用可能かもしれません。
すみません、初心者なんですが、SSO ソースとして TownNews を使うという意味でした。サイトに追加する必要があるコードは何ですか?
これは、TownNews があなたの Discourse サイトの SSO プロバイダーとなることを意味します。Discourse の SSO 実装を使用するには、SSO プロバイダーとして機能しているサービスにコードを追加できる必要があります。そのコードは、サービスのログインプロセスにフックする必要があります。追加が必要なコードの詳細については、こちらをご覧ください:Discourse の公式シングルサインオン (SSO)。
動作するコード例については、WordPress プラグインが SSO を実装している方法をご覧ください:https://github.com/discourse/wp-discourse/tree/master/lib/sso-provider。
OAuth2 を通じて TownNews でユーザーを Discourse にログインさせることも可能です。これは、TownNews が OAuth2 プロバイダーとして機能できる場合に限られます。Discourse との OAuth2 ログイン設定の詳細については、こちらをご覧ください:OAuth2 の基本サポート。その作業に時間を費やす前に、TownNews が OAuth2 プロバイダーとして機能できるかどうかを確認することをお勧めします。それは彼らのドキュメントから確認できるはずです。
サイトプロバイダーと対応中ですが、ご参考までに共有させていただきます。何か役立つ情報があれば幸いです。お時間をいただきありがとうございます。
プロバイダーエンドポイントへのリダイレクト
すべての BLOX-CMS サイトでは、以下の予約済み URL にフェデレーション認証エンドポイントが用意されています。
https://www.example.com/tncms/auth/federated/
コンシューマーサイトは、ユーザーのブラウザをこの URL にリダイレクトすることで認証を開始します。このエンドポイントには、コンシューマーサイトのエンドポイント URL を指定する return パラメータが必要です。
例:
https://www.example.com/tncms/auth/federated/?return=http://vendor.com/login/
また、以下の追加パラメータも受け付けます:
-
source: ユーザーの認証が必要な場合、このパラメータとその値はサイトのログイン URL に渡されます。テンプレートはこの値に応じてログインフォームのインターフェースをカスタマイズできます。指定がない場合はデフォルトで
federatedが設定されます。 -
reauth: 真値を指定すると、ユーザーの現在のログイン状態に関わらずログインページが表示されます。
コンシューマーエンドポイントへのリダイレクト
コンシューマーサイトのエンドポイント URL は、ユーザーを最初にプロバイダーのエンドポイントにリダイレクトする際に return パラメータとしてプロバイダーに渡されます。プロバイダーサイトでの認証が成功すると、ユーザーは code パラメータとともにこの URL にリダイレクトされます。code の値は、以下で説明する即時のウェブサービス呼び出しによってユーザーのアカウント情報と交換されます。
コンシューマーのエンドポイント URL には独自のクエリパラメータを含めることができます。code パラメータは、既存の値を上書きすることなくそれらにマージされます。
プロバイダーサイトのテンプレートの実装次第では、ユーザーが code の値を持たずにコンシューマーエンドポイントに到達する可能性があります。その場合は、ユーザーが認証プロセスをキャンセルしたものとみなしてください。
ログイン成功時の応答例(前述の例に基づく):
http://vendor.com/login/?code={code}
ここで、{code} は後続のウェブサービスで使用するための一意の識別子です。
後続のウェブサービス呼び出し
ユーザーが有効な code を持ってコンシューマーのエンドポイントに到達したら、コンシューマーサイトは直ちにウェブサービス呼び出しを行い、プロバイダーサイトに対してその code をユーザーのアカウント情報と交換する必要があります。
コンシューマーサイトは、ユーザーモジュールの get アクションにアクセスし、プロバイダーから受け取った code パラメータを渡します:
https://www.example.com/tncms/webservice/v1/user/get/?code={code}
応答は、ウェブサービスドキュメントで説明されているユーザーのアカウントデータオブジェクトとなります。無効な code の場合は null が返されます。
code は一度だけ使用可能です。ユーザーアカウントの取得に使用されると即座に無効化され、以降の同じ code を使ったリクエストには null が返されます。
認証プロバイダー オプションを使用すると、あなたのサイトを OpenID 認証プロバイダーとして機能させることができます。つまり、あなたのサイトのユーザーは、サイトの認証情報を使用して、それを許可する他のサイトにログインできます。他の BLOX CMS サイトはクライアントサイトとして機能し、このログイン認証情報の交換を許可することができます。
BLOX CMS サイトを Discourse の OpenID 認証プロバイダーとして機能するように設定することは可能であるはずです。その場合、ユーザーはあなたの TownNews サイトを通じて Discourse フォーラムにログインできるようになります。これを設定するには、Discourse サイトに Discourse OpenID Connect (OIDC) をインストールする必要があります。設定には試行錯誤が必要になる可能性があります。つまずいた場合はお知らせください。お手伝いいたします。