Set up Salesforce auth using OAuth2 basic support plugin

Using the OAuth2 Basic Support plugin (included in Discourse core since v2025.11.0) you can set up Salesforce authentication.

To do so, create a connected OAuth2 app on Salesforce:

  • Create → Apps → New connected app

  • Ensure you allow access to “access basic information”

  • Set the “Callback URL” to https://YOURFORUM.COM/auth/oauth2_basic/callback : Note you must be running your Discourse forum with HTTPS.

  • Take note of client id and secret

On Discourse side, configure the following settings (found under Admin > Login > OAuth2.0):

  • oauth2 enabled: true
  • oauth2 client id and secret, per previous section
  • 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 (this is the default, but ensure it is enabled)
  • 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

If you are having trouble be sure to enable oauth2 debug auth and check your /logs

Last edited by @JammyDodger 2024-05-26T07:26:46Z

Check documentPerform check on document:
9 лайков

Спасибо за этот пост, он оказался неоценимым при настройке недавнего проекта, требующего входа в Salesforce.

В нашем случае приложение Salesforce было сообществом (Community), поэтому нам пришлось изменить некоторые из указанных выше параметров. Я пишу в эту старую тему, на случай если это поможет кому-то ещё. Это чуть не свело меня с ума на целый день.

  • URL авторизации oauth2: https://[COMMUNITY_NAME].force.com/services/oauth2/authorize
  • URL токена oauth2: https://[COMMUNITY_NAME].force.com/services/oauth2/token
  • Путь к ID пользователя в обратном вызове oauth2: id

Изменения путей были выведены постепенно (и с болью) из документации Salesforce и других источников:
https://auth0.com/docs/connections/social/salesforce
Salesforce Help

Тем не менее у нас всё ещё возникали ошибки 403 Forbidden, которые представляли собой простой нестилизованный HTML и совсем не походили на ошибку Discourse, что привело к длительной отладке Salesforce и сильному раздражению. Но проблема была в Discourse.

Forbidden

У вас нет разрешения на доступ к этому ресурсу.

Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 500 Internal Server Error.

Хотя перенаправление на Callback URL, казалось, работало, консоль браузера фиксировала сбои аутентификации. В конце концов причиной сбоя аутентификации оказалось неустановленное значение oauth2 callback user id path. Установка его в id решила все проблемы.

Все остальные настройки такие же, как в предыдущем посте.

2 лайка

Спасибо за инструкции. Мы успешно прошли аутентификацию через Salesforce, но столкнулись с проблемой. Наши объекты/поля Salesforce, похоже, не передаются в Discourse корректно. Сразу после успешного входа в Salesforce на Discourse система воспринимает пользователя как нового и запрашивает имя пользователя, электронную почту и имя, хотя эти данные должны поступать из полей json (name, email, username) OAuth2.

Просим вашей помощи в уточнении формата json для объектов/полей Salesforce, используемых в плагине OAuth2. Мы пробовали варианты object.field, object_field и просто field. Ошибок при этом не возникает, но данные всё равно не передаются из Salesforce в Discourse через json, поэтому система не распознаёт вход как повторный, а не как регистрацию нового пользователя в Discourse.

Вот обновление: мы нашли решение нашей проблемы. Эти настройки с нашей стороны позволяют сопоставить поля SF.

Необходимо настроить следующие параметры:

### oauth2 fetch user details - **отмечено**
### 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 лайка