2014-02-26 140 views
2

我通過用戶名/密碼rest api登錄到salesforce。Salesforce Api登錄後立即失敗?

curl https://login.salesforce.com/services/oauth2/token -d \ 
    "grant_type=password" -d "client_id=xxx" -d \ 
    "client_secret=yyy" -d "username=username" -d \ 
    "password=paswordAndSecurityToken" 

{ 
    "id": "https://login.salesforce.com/id/abc/123", 
    "issued_at": "139342352341", 
    "instance_url": "https://na12.salesforce.com", 
    "signature": "zzz", 
    "access_token": "xyz123" 
} 

現在我想回顧一下並列出here所述的可用REST資源。所以,我請求

curl https://na1.salesforce.com/services/data/v26.0/ -H "Authorization: Bearer xyz123" 

但我得到以下

[{"message":"Session expired or invalid","errorCode":"INVALID_SESSION_ID"}] 

這表明,我認爲這個詞「載體」後的會話ID的地方就是越說的access_token。我如何構建它?如果這是正確構建,我爲什麼或如何立即獲得無效的會話ID。

回答

1

它來自令牌響應的access_token值,這看起來就是你正在做的事情。但我注意到您的令牌響應說實例是na12.salesforce.com,但您的後續請求發送給na1,而不是na12。您必須將請求發送到指定的實例。由於na1不知道你的會話(因爲它在其他地方),這將解釋你爲什麼會從NA1獲得無效的會話響應。

+0

謝謝,這是有道理的。我試過,但這裏是我得到的'curl https://na12.salesforce.com/services/data/v26.0/ -H「授權:承載xyz123」 [{「message」:「會話過期或無效」, 「errorCode」:「INVALID_SESSION_ID」}]' –

+1

運行curl -v和完整性檢查它實際發送的內容。 – superfell

+0

哦,好吧,你不能在unix中使用「與逃脫! –

1

答案是你必須在unix上使用單引號,即使他們的所有例子都使用雙引號。換句話說,你必須使用:(!注意轉義)

curl -v https://na15.salesforce.com/services/data/v26.0/sobjects/ \ 
    -H 'Authorization: Bearer xxyyzz!112233' 

代替

curl -v https://na15.salesforce.com/services/data/v26.0/sobjects/ \ 
    -H "Authorization: Bearer xxyyzz\!112233" 

捲曲發送「\」

0

我有同樣的問題和解決問題使用令牌和\!代替 !

curl https://na1.salesforce.com/services/data/v26.0/ \ 
-H "Authorization: Bearer "xyz\!123"" 

代替

curl https://na1.salesforce.com/services/data/v26.0/ \ 
-H "Authorization: Bearer xyz!123"