我在使用OAuth查詢受限制的數據集(即我的帳戶有權訪問)的SODA documentation about authorization。我已經使用我的客戶端密鑰成功接收和存儲訪問令牌。現在我試圖用它做出一個AJAX請求。這是我的代碼:驗證訪問受限制的SODA數據集的請求
var api_access_token = "OAuth " + stored_access_token;
jQuery.ajax({
url: "https://url/to/dataset.json",
type: "GET",
headers: {
'Authorization': api_access_token,
'X-App-Token': my_app_token
}
})
.done(function(data) {
console.log(data);
});
但是,這似乎並沒有工作。我也試着用jQuery的「beforeSend」屬性獲得相同的結果。以下是我得到:
{
"error" : true,
"message" : "You must be logged in to access this resource"
}
如果我使用cURL嘗試這個請求:
$headers = array(
'Content-Type: application/json',
sprintf('Authorization: OAuth %s', $access_token)
);
$curl = curl_init("https://url/to/dataset.json");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
$response_data = json_decode($response, TRUE);
var_dump($response_data);
然後我得到以下(不同的)錯誤:
"Bad OAuth token"
有什麼想法?
編輯
應用回調前綴:https://example.org
- 獲取授權碼
https://example.org/dashboard 這裏我有一個錨標記,看起來像這樣:
<a href="https://soda.demo.socrata.com/oauth/authorize?client_id=' . $app_id . '&response_type=code&redirect_uri=https://example.org/dashboard">Authorize DOIT here.</a>
這讓我來,要求允許訪問蘇打頁
- 獲得訪問令牌
- 使用訪問令牌
我在這裏重定向:
https://example.org/dashboard/?code=CODE_HERE
然後服務器端腳本使用curl發佈訪問代碼的請求(如上所示),我成功接收並存儲爲cookie。
從同一頁(https://example.org/dashboard/?code=CODE_HERE)我嘗試請求的私有數據集,如上面所詳述的,其失敗。
是這個問題,我從https://example.org/dashboard請求授權碼,然後從https://example.org/dashboard?code=CODE_HERE
你對該域名發出了哪個域名?您必須針對與您使用該標記相同的域名使用OAuth。我認爲這可能是問題所在。 – chrismetcalf
用我正在使用的域和流編輯我的問題。 – duncanrager
是的,改變你的'/ oauth/authorize' URL來反映你想要認證的域名,而不是'soda.demo.socrata.com'。令牌與他們簽發的域名綁定。我會更新文檔以使其更清楚。 – chrismetcalf