| 概要 | 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 を使用したのは、Discourse がユーザー名として期待するものの方が、JSON 内のユーザー名よりも似ているように思えたためです。メールアドレスのパスは省略しました。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_email_pathを設定した場合、OAuth2 プロバイダーはユーザーがそのメールアドレスを所有していることを確認する必要があります。 これを怠ると、Discourse でのアカウント乗っ取りにつながる可能性があります!
当社でホストされていますか?このプラグインは、Business および Enterprise プランで利用可能です。OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
ユーザーのサインアップを自動化する必要がありますか?Auto-provisioning user accounts when SSO is enabled を参照してください。