我正在使用salesforce rest api从我的rails app访问salesforce帐户。我创建了一个远程访问应用程序并获得了密钥N id。我能够对用户进行身份验证并获取auth_token,实例url以及所有这些内容。但是,当我在“instance_url / services / data / v20.0”发送请求以及访问令牌时,我收到此错误:
[{"message":"Session expired or invalid","errorCode":"INVALID_SESSION_ID"}]
我有一个开发人员salesforce帐户,并为每个配置文件启用了API,但“经过身份验证的网站”配置文件(无法访问)除外。
拜托,有人可以帮我吗?
我正在使用以下请求对用户进行身份验证
HTTParty.post "login.salesforce.com/services/oauth2/token";, :body=>{"grant_type"=>"authorization_code","code"=>"abc}","client_secret"=>"abc", "client_id"=>"abc","format"=>"json","redirect_uri"=>"localhost:3000/salesforce/callback";}
返回签名,id,instance_url,issued_at,access_token和refresh_token
HTTParty.get "ap1.salesforce.com/services/data/v20.0";, :headers=>{"Authentication"=>"OAuth access_token", "Content-Type"=>"application/json"}
以
回应[{"errorCode"=>"INVALID_SESSION_ID", "message"=>"Session expired or invalid"}]
答案 0 :(得分:9)
如何将sessionId传递给/services/data/v20.0请求?,如果您的access_token为abc123
,那么您需要在请求中使用Authorization: OAuth abc123
的http标头。
答案 1 :(得分:2)
salesforce中的API会话都会过期。 设置每个会话的持续时间转到Setup > Administration Setup > Security Controls > Session Settings>
最长为8小时。
喝彩!
答案 2 :(得分:0)
如果您使用的是Oauth,则需要使用刷新令牌流,在此错误上获取新的续订令牌。以下是更多详情:http://wiki.developerforce.com/index.php/Digging_Deeper_into_OAuth_2.0_on_Force.com
请在上面的WIKI页面链接中搜索“刷新令牌”。
答案 3 :(得分:0)
我遇到的问题:
确保在授权请求中包含范围“web”,例如
使用在authorize响应中返回的instanceUrl。在我的情况下,这是https://eu2.salesforce.com我总是尝试使用https://na1.salesforce.com无效
答案 4 :(得分:0)
遇到同样的问题,在我的情况下,密码中的<
>
字符导致了问题。
答案 5 :(得分:0)
我正在添加这个答案,因为上面的任何其他答案对我有帮助。我的问题实际上是我在 login.salesforce.com/services/oauth2/token 请求期间在JSON响应中收到 access_token 。
您必须从access_token 中删除ID,如SalesForce文档中所述:"Substitute the ID for the token value"
答案 6 :(得分:0)
除了其他答案所标识的其他可能问题之外,Salesforce中的Lock sessions to the IP address from which they originated
设置可能是导致其他有效代码的原因。来自the following Salesforce KB article:
说明
启用“将会话锁定到其来源的IP地址”后,如果使用OAuth2访问令牌执行Salesforce REST API调用,即使在同一Apex事务中获得了令牌,也可能会返回INVALID_SESSION_ID。解决方案
“将会话锁定到其起源的IP地址”是严格的,在这种情况下,内部IP地址不会自动列入白名单。由于登录标注和后续的REST API标注可能是通过不同的内部IP地址执行的,因此如果启用了上述首选项,则在使用访问令牌时可能会返回INVALID_SESSION_ID。要解决此问题,您可以使用连续IP强制执行功能(在15年夏季推出):
- 将“将会话锁定到其起源的IP地址”关闭,
- 打开“在每个请求上强制登录IP范围”,
- 选择连接的应用的IP放松策略“强制IP限制”,然后
- 将Salesforce的内部IP范围10.0.0.0到10.255.255.255添加到需要使用Salesforce的REST API的配置文件列表中。
或只是放松IP限制:
- 将“将会话锁定到其起源的IP地址”关闭,然后
- 选择已连接应用的IP放松政策“放松IP限制”