如何使用同一Connected App访问多个Salesforce Org及其社区站点
方案可行性结论
你想复用站点A下创建的Connected App的client_id、client_secret,仅更换用户名密码访问站点B的方案不可行。
原因:Connected App是Salesforce org(即你所说的站点所属的独立实例)的专属资源,仅在创建它的org内生效,无法直接跨独立org使用。
替代实现方案
如果你希望用相同的client_id、client_secret值对接两个站点,可以在站点B的org中单独创建一个新的Connected App,手动填写和站点A的Connected App完全相同的client_id、client_secret即可,两个实例的Connected App参数相互独立,不会冲突。
用户名密码凭证调用REST API的实现方式
你可以使用OAuth 2.0 用户名密码流实现需求,配置和调用要求如下:
前置配置
- 两个站点的Connected App都需要开启OAuth支持,勾选「允许用户名和密码流」选项,分配的权限范围至少包含
api,根据你调用的接口类型补充web、chatter_api等范围 - 所有需要使用的社区用户,都需要被分配对应社区的访问权限,同时加入对应Connected App的允许访问用户范围
调用方法
调用时不需要更换client_id和client_secret(只要你两个站点的Connected App配置了相同的参数),仅需要更换两个参数即可:
- 认证请求的端点地址:根据你要访问的社区调整请求地址,格式为
https://[目标社区域名]/services/oauth2/token - 认证请求的用户名、密码参数:填写对应该社区的合法用户凭证,若你的请求IP不在Salesforce白名单内,密码需要拼接用户的安全令牌
密码流的请求参数示例
POST https://[目标社区域名]/services/oauth2/token Content-Type: application/x-www-form-urlencoded grant_type=password &client_id=你配置的统一client_id &client_secret=你配置的统一client_secret &username=目标社区的用户账号 &password=用户密码+用户安全令牌
请求成功后会返回access_token,后续调用该社区的REST API时,在请求头中带上Authorization: Bearer {access_token}即可。
注意事项
- 两个站点下的Connected App本质是独立的资源,需要分别做权限配置、安全策略配置
- 不同社区的用户仅能访问所属站点下的社区资源,无法跨站点授权访问
内容的提问来源于stack exchange,提问作者Deepak Sharma
相关产品推荐
相关产品推荐

