使用Restforce调用Salesforce API时遇INVALID_SESSION_ID错误求助
排查Restforce与Salesforce交互时的INVALID_SESSION_ID错误
我来帮你梳理这个问题的可能原因和解决办法,结合你提到的Connected App配置,咱们一步步来排查:
1. 确认Restforce初始化参数是否正确
Restforce的实例创建需要完整且正确的OAuth参数,尤其是容易忽略instance_url和refresh_token的传入。你可以检查下你的初始化代码是否类似这样:
client = Restforce.new( client_id: "你的Connected App Client ID", client_secret: "你的Connected App Client Secret", refresh_token: "你获取到的刷新令牌", instance_url: "Salesforce返回的实例域名(比如na45.salesforce.com)", access_token: "你获取到的访问令牌" # 可选,Restforce会自动用refresh_token刷新 )
注意:instance_url不能用通用的login.salesforce.com,必须是授权后返回的具体实例地址,否则会导致会话无效。
2. 检查访问令牌的自动刷新是否生效
虽然你配置了永久有效的刷新令牌,但如果Restforce初始化时缺少client_secret或refresh_token,就无法自动刷新过期的访问令牌。你可以手动触发刷新试试:
client.refresh!
如果刷新成功后API调用恢复正常,说明之前的访问令牌已经过期,而自动刷新机制因为参数缺失没起作用。
3. 验证刷新令牌的有效性
即使设置了“刷新令牌在撤销前始终有效”,也要确认获取刷新令牌的流程是否正确:
- 授权请求必须包含
refresh_token和offline_access范围(你已经设置了,但要确保请求时确实传递了这些范围) - 第一次授权时才会返回刷新令牌,如果你后续重新授权没有加
prompt=consent参数,可能不会再次返回。可以尝试重新走一遍OAuth授权流程,获取新的刷新令牌测试。 - 也可以登录Salesforce后台,进入设置 > 应用程序 > 连接的应用程序 > 管理已授权的应用程序,查看你的用户是否有该Connected App的授权记录,确认刷新令牌未被撤销。
4. 检查IP范围限制
如果你的Connected App设置了IP限制(在Connected App的“OAuth 政策”里),而你的Rails服务器IP不在允许列表中,即使令牌正确,Salesforce也会拒绝请求并返回会话无效错误。可以暂时关闭IP限制测试,或者把服务器IP添加到允许列表。
5. 确认用户的API访问权限
别忘了检查你的Salesforce用户是否启用了API访问:进入用户详情页,找到“API启用”选项,确保它是勾选状态。没有API权限的话,即使令牌正确也无法调用API。
先从这几个方向排查,应该能定位到问题所在。
内容的提问来源于stack exchange,提问作者almusavi
相关产品推荐
相关产品推荐

