TownNews CMS との SSO

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 が返されます。

これは有望ですね:https://help.bloxcms.com/knowledge-base/applications/settings/users/authentication_provider/article_fa0ce6ec-9824-11e4-b296-23bd78ef308a.html

認証プロバイダー オプションを使用すると、あなたのサイトを OpenID 認証プロバイダーとして機能させることができます。つまり、あなたのサイトのユーザーは、サイトの認証情報を使用して、それを許可する他のサイトにログインできます。他の BLOX CMS サイトはクライアントサイトとして機能し、このログイン認証情報の交換を許可することができます。

BLOX CMS サイトを Discourse の OpenID 認証プロバイダーとして機能するように設定することは可能であるはずです。その場合、ユーザーはあなたの TownNews サイトを通じて Discourse フォーラムにログインできるようになります。これを設定するには、Discourse サイトに Discourse OpenID Connect (OIDC) をインストールする必要があります。設定には試行錯誤が必要になる可能性があります。つまずいた場合はお知らせください。お手伝いいたします。