salesforce rest api INVALID_SESSION_ID错误

时间:2011-05-23 09:32:32

标签: api rest salesforce

我正在使用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"}]

7 个答案:

答案 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)

我遇到的问题:

答案 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年夏季推出):

     
      
  1. 将“将会话锁定到其起源的IP地址”关闭,
  2.   
  3. 打开“在每个请求上强制登录IP范围”,
  4.   
  5. 选择连接的应用的IP放松策略“强制IP限制”,然后
  6.   
  7. 将Salesforce的内部IP范围10.0.0.0到10.255.255.255添加到需要使用Salesforce的REST API的配置文件列表中。
  8.   
     

或只是放松IP限制:

     
      
  1. 将“将会话锁定到其起源的IP地址”关闭,然后
  2.   
  3. 选择已连接应用的IP放松政策“放松IP限制”
  4.