| 概要 | Discourse OAuth2 Basic は、ユーザー詳細をトークンで取得できる JSON API エンドポイントを持つと仮定した、基本的な OAuth2 プロバイダーをサポートします。
| インストールガイド | このプラグインは Discourse コアにバンドルされています。プラグインを個別にインストールする必要はありません。
機能
このプラグインを使用すると、基本的な OAuth2 プロバイダーを Discourse の認証として利用できます。多くのプロバイダーで動作するはずですが、ログインしているユーザーに関する情報を取得するための JSON エンドポイントを提供している必要があります。
これは主に、あまり人気のないログインプロバイダーを使用している人にとって役立ちます。Google、Facebook、Twitter を使用したい場合は、それらは最初から含まれているため、このプラグインは不要です。また、Github リポジトリで他のログインプロバイダーを探すこともできます。
設定
基本設定
- まず、OAuth2 プロバイダーで Discourse アプリケーションを登録します。リダイレクト URI が必要になります。
http://DISCOURSE_HOST/auth/oauth2_basic/callback
![]()
DISCOURSE_HOSTを適切な値に置き換え、有効になっている場合はhttpsを使用していることを確認してください。OAuth2 プロバイダーからclient IDとsecret、およびいくつかの URL が提供されます。
- 管理 → 設定 → OAuth2 ログイン に移動し、OAuth2 プロバイダーの基本設定を入力します。
oauth2_enabled- 機能を有効にするためにチェックを入れますoauth2_client_id- プロバイダーからのクライアント IDoauth2_client_secret- プロバイダーからのクライアントシークレットoauth2_authorize_url- プロバイダーの承認 URLoauth2_token_url- プロバイダーのトークン URL
上記の設定値がわからない場合は、プロバイダーの開発者ドキュメントを確認するか、カスタマーサポートに連絡してください。
JSON ユーザーエンドポイントの設定
Discourse は、OAuth2 プロバイダーから承認トークンを受け取ることができるようになりました。ただし、認証を完了するためには、Discourse がさらに多くの情報を必要とします。
トークンに基づいてユーザー情報を取得できる API エンドポイントが必要です。
例えば、OAuth2 プロバイダーの SoundCloud はそのような URL を提供しています。SoundCloud の OAuth2 トークンを持っている場合、https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN に GET リクエストを送信すると、ユーザー情報が含まれた JSON オブジェクトが返されます。
Discourse でこれを設定するには、oauth2_user_json_url 設定の値を設定する必要があります。この場合、以下の値を入力します。
https://api.soundcloud.com/me?oauth_token=:token
:token の部分は、認証完了時に受け取った承認トークンに置き換える必要があることを Discourse に伝えます。
最後のステップを完了する必要があります。Discourse に、受け取った JSON で利用可能な属性を知らせる必要があります。以下は SoundCloud からのサンプル応答です。
{
"id": 3207,
"permalink": "jwagener",
"username": "Johannes Wagener",
"uri": "https://api.soundcloud.com/users/3207",
"permalink_url": "http://soundcloud.com/jwagener",
"avatar_url": "http://i1.sndcdn.com/avatars-000001552142-pbw8yd-large.jpg?142a848",
"country": "Germany",
"full_name": "Johannes Wagener",
"city": "Berlin"
}
oauth2_json_user_id_path、oauth2_json_username_path、oauth2_json_name_path、oauth2_json_email_path 変数を、JSON の適切な属性を指すように設定する必要があります。
必須の属性は id のみです。将来ユーザーがログインした際に正しいアカウントを取得するために必要です。他の属性は利用可能であれば非常に役立ちます。これらにより、ユーザーのサインアッププロセスが高速化され、フォームに事前に入力されるためです。
以下は、JSON パス設定を構成した方法です。
oauth2_json_user_id_path: 'id'
oauth2_json_username_path: 'permalink'
oauth2_json_name_path: 'full_name'
permalink を使用したのは、JSON 内の username よりも Discourse が期待するユーザー名に近いように思えたためです。メールパスを省略したことに注意してください。SoundCloud はメールを提供しないため、ユーザーは Discourse で初めてサインアップする際にメールを提供して確認する必要があります。
JSON オブジェクトから必要なプロパティがネストされている場合は、ピリオドを使用できます。例えば、API が以下のような異なる構造を返した場合。
{
"user": {
"id": 1234,
"email": {
"address": "test@example.com"
}
}
}
oauth2_json_user_id_path に user.id、oauth2_json_email_path に user.email.address を使用できます。
キー自体にピリオドが含まれている場合は、ダブルクォートで囲むか、バックスラッシュでピリオドをエスケープする必要があります。例えば、以下の JSON が与えられた場合。
{
"example.com/uid": "myuid"
}
パスを example\.com/uid または "example.com/uid" として指定します。
グループとユーザーフィールドの同期
-
oauth2_json_groups_path: ユーザーのグループを文字列の配列として含む JSON パス。最初のメンバーがログインした後、これらのグループは Discourse のグループ設定の「関連するグループ」セクションで選択可能になります。グループ同期を無効にする場合は空白のままにしてください。 -
oauth2_user_field_mappings: Discourse のユーザーフィールドに保存される JSON パスのマッピング。ユーザーフィールドは数値 ID で識別され、管理パネルから編集する際の URL で確認できます。
![]()
oauth2_json_email_pathを設定した場合、OAuth2 プロバイダーは そのユーザーがそのメールアドレスを所有していることを確認する必要があります。 これを行わないと、Discourse でのアカウント乗っ取りにつながる可能性があります!
当方でホストされていますか?このプラグインは、ビジネスプランおよびエンタープライズプランで利用可能です。OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
ユーザーのサインアップを自動化する必要がありますか?Auto-provisioning user accounts when SSO is enabled をご覧ください。