无需用户名密码完成Salesforce REST API的OAuth2授权方案咨询
Salesforce服务端OAuth2授权方案(无用户名密码存储版)
该场景完全适配OAuth 2.0的授权码流(Authorization Code Flow),全程不需要在你的系统中存储用户的Salesforce账号密码,仅用你提到的client_id、client_secret、重定向URL三个核心参数即可完成完整授权。
前置准备
- 先在Salesforce后台的Connected App配置中开启OAuth设置,填写你正式使用的重定向URL,权限范围至少勾选
api(需要长期免授权访问还要额外勾选refresh_token),同时确认Connected App的IP限制、用户权限配置符合业务要求。 - 提前获取三个核心参数:
client_id(即Connected App的Consumer Key)、client_secret(即Consumer Secret)、已经在Connected App中配置完成的重定向URL。
完整授权流程步骤
步骤1:构造用户授权跳转链接
服务端生成授权跳转链接,引导用户跳转到Salesforce官方授权页面,链接格式如下:
https://<Salesforce实例域名>/services/oauth2/authorize?response_type=code&client_id=<你的client_id>&redirect_uri=<你的重定向URL>&scope=api refresh_token
说明:沙箱环境实例域名为
test.salesforce.com,生产环境为login.salesforce.com,也可替换为你的组织自定义域名。用户跳转到该链接后会在Salesforce官方页面完成账号密码登录、授权操作,你的系统全程不会接触到用户的账号凭证。
步骤2:接收授权码
用户在Salesforce完成授权后,Salesforce会自动跳转到你配置的重定向URL,同时在请求的查询参数中附带code参数(即授权码),你直接在重定向接口的请求参数中提取该值即可。
注意:授权码有效期仅15分钟,且只能使用一次,拿到后需要尽快完成令牌兑换
步骤3:授权码兑换访问令牌+刷新令牌
服务端后台发起POST请求到Salesforce令牌接口,该操作完全在服务端完成,不需要用户参与:
- 请求地址:
https://<Salesforce实例域名>/services/oauth2/token - 请求头:
Content-Type: application/x-www-form-urlencoded - 请求参数:
grant_type:固定填authorization_codeclient_id:你的client_idclient_secret:你的client_secretredirect_uri:和前序步骤完全一致的重定向URLcode:上一步拿到的授权码
请求成功后会返回核心字段:
access_token:访问Salesforce API的临时凭证,通常有效期2小时refresh_token:长期刷新凭证(除非用户主动撤销授权),可用来刷新过期的access_tokeninstance_url:当前授权用户对应的Salesforce实例域名,后续所有API调用都使用该域名
步骤4:后续API调用&令牌刷新
- 调用Salesforce业务API时,只需要在请求头中携带
Authorization: Bearer <access_token>即可 access_token过期后不需要用户重新授权,直接用refresh_token后台兑换新的access_token即可,请求参数如下:- 请求地址和请求头和兑换令牌接口一致
grant_type:固定填refresh_tokenclient_id:你的client_idclient_secret:你的client_secretrefresh_token:之前存储的刷新凭证
安全注意事项
- 你的系统仅需要存储
access_token、refresh_token、instance_url三个值即可,完全不需要存储用户的Salesforce账号密码,符合你的要求 client_secret、refresh_token属于高敏感信息,必须加密存储,禁止明文保存在配置文件、前端代码中- 重定向URL需要使用HTTPS协议,避免授权码被网络拦截
- 如果用户在Salesforce端撤销了Connected App的授权,你存储的
refresh_token会直接失效,引导用户重新走一遍授权流程即可
内容的提问来源于stack exchange,提问作者Anu
相关产品推荐
相关产品推荐

