Discourse OAuth2 基本

:discourse2: 概要 Discourse OAuth2 Basic は、ユーザー詳細をトークンで取得できる JSON API エンドポイントを持つ基本的な OAuth2 プロバイダーをサポートします。
:open_book: インストールガイド このプラグインは Discourse コアにバンドルされています。プラグインを個別にインストールする必要はありません。

機能

このプラグインを使用すると、基本的な OAuth2 プロバイダーを Discourse の認証として利用できます。多くのプロバイダーで動作しますが、ログインしているユーザーに関する情報を取得するための JSON エンドポイントを提供しなければならないという注意点があります。

これは主に、あまり普及していないログインプロバイダーを使用している人々にとって役立ちます。Google、Facebook、Twitter を使用したい場合は、それらは最初から含まれているため、このプラグインは不要です。また、Github リポジトリ で他のログインプロバイダーを探すこともできます。

設定

基本設定

  1. まず、OAuth2 プロバイダーで Discourse アプリケーションを登録します。リダイレクト URI が必要になります。それは以下のようになります:

    http://DISCOURSE_HOST/auth/oauth2_basic/callback

:information_source: DISCOURSE_HOST を適切な値に置き換え、有効な場合は https を使用していることを確認してください。OAuth2 プロバイダーは client IDsecret、そしていくつかの URL を提供します。

  1. 管理設定OAuth2 ログイン に移動し、OAuth2 プロバイダーの基本設定を入力します:
  • oauth2_enabled - この機能を有効にするためにチェックを入れてください
  • oauth2_client_id - プロバイダーからのクライアント ID
  • oauth2_client_secret - プロバイダーからのクライアントシークレット
  • oauth2_authorize_url - プロバイダーの認証 URL
  • oauth2_token_url - プロバイダーのトークン URL

:information_source: 上記の設定値がわからない場合は、プロバイダーの開発者ドキュメントを確認するか、カスタマーサポートに連絡してください。

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_pathoauth2_json_username_pathoauth2_json_name_pathoauth2_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" として指定します。

:warning: oauth2_json_email_path を設定した場合、OAuth2 プロバイダーはユーザーがそのメールアドレスを所有していることを確認する必要があります。 これを怠ると、Discourse でのアカウント乗っ取りにつながる可能性があります!

:discourse2: 当社でホストされていますか?このプラグインは、Business および Enterprise プランで利用可能です。OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion

:spiral_notepad: ユーザーのサインアップを自動化する必要がありますか?Auto-provisioning user accounts when SSO is enabled を参照してください。

「いいね!」 28
Keycloak with Discourse
Discourse SSO with OAuth2
Login from another user database
Shopify Integration
How can we enable Auth0 SSO in Discourse
OAuth2 integration with Drupal
OAuth connection of discourse
Login flow (Flask -> Discourse -> Flask) with OAuth
How to use Oauth2 service provided by discourse?
How to login to discourse from external website
Is "partial" SSO possible?
Set up Salesforce auth using OAuth2 basic support plugin
How to force users link phone number when they using Discourse?
OAuth2 Custom Redirects Plugin
Custom Login / Registration from another API
Login on discourse using mastodon credentials
Open source will support customized provider SSO
Oauth2 with fusionauth cert issues
Auto-provisioning user accounts when SSO is enabled
Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin
SSO with TownNews CMS
What is supposed to go in “DISCOURSE_HOST”?
Custom Provider log-in with OAuth only sign-up/log-in
Discord, Google and Microsoft login, is oAuth2 enough?
Populating email field on login page
CodeBerg support
Gate our community to just members of our Shopify site?
Intergrate Discourse with keycloak
Integration into custom auth system where emails are not unique?
Twitter login doesn't work on meta
Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)
Question about Docker Manager?
Discourse OpenID Connect (OIDC)
🧩 How to Build an Android App User Community with Discourse? [HeyApks Project]
Bundling more popular plugins with Discourse core
Drupal 8 and Discourse shared SSO
Discourse for self hosting
Discourse + Intercom (Current User Id)
Error during SSO integration - Wholistic Minds
ADFS Authentication
Pulling user auth0 sub from OAuth2.0 plugin
Suggestion for improving Integrated Authentication development
Github and Twitter Login/Sign-Up Functionality?
Automatically creating a user when logging in with Webflow/Memberspace
Switching out authentication for a passwordless alternative
Removing Yahoo login from Core, and deprecating OpenID 2.0
Shopify Integration
SSO and Auth0
Migrate a Jive Clearspace forum to Discourse