2011-05-23 111 views
5

我正在使用salesforce rest api從我的rails應用程序訪問salesforce帳戶。我創建了一個遠程訪問應用程序,並獲得了密鑰N的id。我能夠驗證用戶並獲得auth_token,實例url等等。但是,當我在「instance_url /服務/數據/ v20.0」與訪問令牌一起發送的請求,我得到這個錯誤:salesforce rest api INVALID_SESSION_ID錯誤

[{"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";} 

這是返回簽名,身份證,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

你有遠程訪問在您的Salesforce組織設置是否正確?如果您發佈了登錄/查詢代碼,它也可能有所幫助。 – lnediger 2011-05-23 14:14:57

回答

8
響應

如何將sessionId傳遞給/services/data/v20.0請求?如果您的acc ess_token爲abc123,那麼在請求中需要一個http標頭Authorization: OAuth abc123

+0

我發送成功的響應,如果我發送api版本的請求.............「instance_url/services/data /」(包含access_token在標題中)返回[{「label」 =>「Winter '11」,「url」=>「/ services/data/v20.0」,「version」=>「20.0」},{「label」=>「Spring '11」,「url」=> >「/ services/data/v21.0」,「version」=>「21.0」}] .............還有什麼其他的我不期待? – Saums 2011-05-24 03:54:37

+0

版本資源不需要認證,所以證明什麼都沒有。你爲什麼不發佈一些代碼和/或你的實際請求。 – superfell 2011-05-24 05:11:42

+0

我使用以下請求驗證用戶....... HTTParty.post「https://login.salesforce.com/services/oauth2/token」,:body => {「grant_type」=>「authorization_code 「,」code「=>」abc}「,」client_secret「=>」abc「,」client_id「=>」abc「,」format「=>」json「,」redirect_uri「=>」http:// localhost :3000/salesforce/callback「} ...........這是返回我簽名,身份證,instance_url,issued_at,access_token和refresh_token – Saums 2011-05-24 05:49:30

2

無論是否存在活動,salesforce中的API會話均會過期。 設置每個會話的持續時間去Setup > Administration Setup > Security Controls > Session Settings>

最大是8小時。

乾杯!

+0

我不認爲這是問題bcoz會話時間設置爲2小時,我發送請求後立即獲得access_token ........... ....如果我發送api版本的請求.............「instance_url/services/data /」(包含在header中的access_token)返回[ {「label」=>「Winter '11」,「url」=>「/ services/data/v20.0」,「version」=>「20.0」},{「label」=>「Spring '11」, 「url」=>「/ services/data/v21.0」,「version」=>「21.0」}] .............還有什麼我不好意思看? – Saums 2011-05-24 03:54:01

0

面臨着同樣的問題,在我的情況下,在密碼<>字符是造成問題的原因。

0

我添加了這個答案,因爲上面的任何其他答案幫助了我。我的問題實際上是我使用access_token,因爲我在login.salesforce.com/services/oauth2/token請求中收到了JSON響應。

你必須從刪除ID的access_token,因爲它是Salesforce的文檔中描述:"Substitute the ID for the token value"