Salesforce 認証のセットアップ:OAuth2 基本サポートプラグインの使用

OAuth2 Basic Support プラグイン(v2025.11.0 以降の Discourse コアに標準搭載)を使用すると、Salesforce 認証を設定できます。

そのためには、Salesforce 上で接続された OAuth2 アプリを作成します:

  • 作成 → Apps → 新規接続アプリ

  • 「基本情報へのアクセス」を許可することを確認してください

  • 「コールバック URL」を https://YOURFORUM.COM/auth/oauth2_basic/callback に設定します:Discourse フォーラムを HTTPS で実行している必要があります。

  • クライアント ID とシークレットをメモしてください

Discourse 側では、以下の設定(管理 → ログイン → OAuth2.0 の下にあります)を構成してください:

  • oauth2 enabled: true
  • oauth2 client id and secret: 上記セクションで取得したもの
  • oauth2 authorize url: https://login.salesforce.com/services/oauth2/authorize
  • oauth2 token url: https://login.salesforce.com/services/oauth2/token
  • oauth2 fetch user details: true(デフォルトで有効ですが、有効になっていることを確認してください)
  • oauth2 user json url: https://login.salesforce.com/services/oauth2/userinfo
  • oauth2 json user id path: user_id
  • oauth2 json username path: preferred_username
  • oauth2 json name path: name
  • oauth2 json email path: email
  • oauth2 email verified: true
  • oauth2 authorize options: scope, display, immediate, state

問題が発生した場合は、oauth2 debug auth を有効にして /logs を確認してください。

「いいね!」 9

この投稿のおかげで、Salesforce ログインを必要とする最近のプロジェクトのセットアップができました。本当に助かりました。

私たちの場合、Salesforce アプリはコミュニティだったので、上記の詳細の一部を変更する必要がありました。他の誰かの助けになればと思い、この古いスレッドに投稿します。ほぼ一日中頭を抱えて悩みました。

  • oauth2 認可 URL: https://[COMMUNITY_NAME].force.com/services/oauth2/authorize
  • oauth2 トークン URL: https://[COMMUNITY_NAME].force.com/services/oauth2/token
  • oauth2 コールバックユーザー ID パス: id

パスの変更は、Salesforce や他のドキュメントを少しずつ(そして苦しみながら)調べて解決しました:
https://auth0.com/docs/connections/social/salesforce
Salesforce Help

しかし、それでも 403 Forbidden エラーが発生しました。これは単なるスタイルなしの HTML で、Discourse のエラーには見えなかったので、Salesforce のデバッグと歯ぎしりを繰り返しました。しかし、問題は実は Discourse にありました。

Forbidden

このリソースにアクセスする権限がありません。

さらに、ErrorDocument を使用してリクエストを処理しようとした際に、500 Internal Server Error エラーが発生しました。

コールバック URL へのリダイレクトは機能しているように見えたものの、ブラウザコンソールでは認証失敗が記録されていました。結局、認証失敗の原因となったのは、未設定だった oauth2 callback user id path でした。これを id に設定することで、すべてが正常に動作するようになりました。

他の設定は前の投稿と同じです。

「いいね!」 2

ガイドラインをいただきありがとうございます。Salesforce を使用した認証には成功しましたが、問題が発生しました。Salesforce のオブジェクト/フィールドが Discourse に正常に渡されていないようです。Discourse で Salesforce によるログインが成功した直後に、Discourse が新規ユーザーとして扱い、ユーザー名、メールアドレス、名前を要求しています。これらは oauth2 の JSON 内の name、email、username フィールドから取得されるはずです。

oauth2 プラグインで使用する Salesforce のオブジェクト/フィールドの JSON 形式について、ご教示いただけますでしょうか。object.field、object_field、field のみで試してみましたが、エラーは発生しなくても、Salesforce から Discourse へ JSON を通じて何ら情報が渡されず、Discourse でのログインを新規ユーザーとして認識されないようにできていません。

追記ですが、当社の課題に対する解決策を見つけました。SF のフィールドをマッピングするための以下の設定が必要です。

必須設定:

### oauth2 fetch user details - **checked**
### oauth2 user json url - **https://<yoursfsite.com>/services/oauth2/userinfo**
### oauth2 user json url method - **get**
### oauth2 json user id path - **user_id**
### oauth2 json username path - **preferred_username**
### oauth2 json name path - **name**
### oauth2 json email path - **email**

この情報が、oauth2 SF 接続の解決策を探している他の方々のお役に立てれば幸いです。

「いいね!」 2

@sonny.mendoza さん、情報ありがとうございます!これをこのトピックの上部にある手順に統合しました。今後、他の皆さんのお役に立てると思います :slight_smile:

「いいね!」 3