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)였기 때문에 위의 세부 사항을 일부 수정해야 했습니다. 다른 분들에게 도움이 될까 하여 이 오래된 스레드에 게시합니다. 하루 종일 머리가 거의 녹아내릴 뻔했습니다.

  • oauth2 authorize url: https://[COMMUNITY_NAME].force.com/services/oauth2/authorize
  • oauth2 token url: https://[COMMUNITY_NAME].force.com/services/oauth2/token
  • oauth2 callback user id path: id

경로 변경 사항은 Salesforce 및 기타 문서에서 점차적으로(그리고 고통스럽게) 파악했습니다:
https://auth0.com/docs/connections/social/salesforce
Salesforce Help

그러나 여전히 403 Forbidden 오류가 발생했는데, 이는 스타일이 적용되지 않은 순수 HTML 형태였고 Discourse 오류로 보이지 않아 Salesforce를 놓고 많은 디버깅과 고생을 해야 했습니다. 하지만 문제는 결국 Discourse에 있었습니다.

Forbidden

You don’t have permission to access this resource.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

Callback URL로의 리디렉션이 작동하는 것처럼 보였지만, 브라우저 콘솔에는 인증 실패가 기록되었습니다. 결국 인증 실패의 원인은 설정되지 않은 oauth2 callback user id path였습니다. 이를 id로 설정하니 모든 문제가 해결되었습니다.

나머지 모든 설정은 이전 게시글과 동일합니다.

2개의 좋아요

가이드라인을 제공해 주셔서 감사합니다. Salesforce를 사용하여 인증에 성공했지만 문제가 발생했습니다. SF 객체/필드가 Discourse로 정상적으로 전달되지 않는 것 같습니다. Discourse에서 SF 로그인이 성공한 직후, 해당 사용자가 신규 사용자로 처리되며 username, email, name을 입력하도록 요청합니다. 이 정보는 oauth2 json의 name, email, username 필드로부터 가져와야 하는데도 말이죠.

oauth2 플러그인에서 SF 객체/필드를 사용할 때의 json 형식에 대해 도움을 요청드립니다. object.field, object_field, 그리고 field만 사용하는 방식으로 시도해 보았지만, 오류는 발생하지 않으면서도 SF에서 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개의 좋아요