使用 OAuth2 基本支持插件(自 v2025.11.0 起已包含在 Discourse 核心中),您可以设置 Salesforce 身份验证。
为此,请在 Salesforce 上创建一个连接的 OAuth2 应用:
在 Discourse 端,配置以下设置(位于 管理 > 登录 > OAuth2.0 下):
- oauth2 enabled: true
- oauth2 client id 和 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 应用是一个社区(Community),这意味着我们需要更改上述的一些细节。我在这个旧线程中发帖,希望能帮助到其他遇到同样问题的人。这个问题几乎让我整整一天都绞尽脑汁。
- 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 通过 JSON 传递到 Discourse,导致系统无法识别该登录为非新用户。
更新一下,我们已找到问题的解决方案,需要在我们的端进行以下设置以映射 Salesforce 字段。
必须配置的设置如下:
### oauth2 获取用户详情 - **已勾选**
### oauth2 用户 JSON URL - **https://<yourfssite.com>/services/oauth2/userinfo**
### oauth2 用户 JSON URL 方法 - **get**
### oauth2 JSON 用户 ID 路径 - **user_id**
### oauth2 JSON 用户名路径 - **preferred_username**
### oauth2 JSON 姓名路径 - **name**
### oauth2 JSON 邮箱路径 - **email**
希望这能帮助其他正在寻找 OAuth2 与 Salesforce 连接解决方案的用户。
2 个赞
david
(David Taylor)
6
感谢提供信息 @sonny.mendoza —— 我已将其整合到本主题顶部的说明中,以便未来能帮助到其他用户 
3 个赞