2017-02-10 122 views
0

我在使用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

  1. 獲取授權碼

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

    +0

    你對該域名發出了哪個域名?您必須針對與您使用該標記相同的域名使用OAuth。我認爲這可能是問題所在。 – chrismetcalf

    +0

    用我正在使用的域和流編輯我的問題。 – duncanrager

    +0

    是的,改變你的'/ oauth/authorize' URL來反映你想要認證的域名,而不是'soda.demo.socrata.com'。令牌與他們簽發的域名綁定。我會更新文檔以使其更清楚。 – chrismetcalf

    回答

    1

    查詢數據來回答第一個問題,假設你想在用戶的瀏覽器做在客戶端驗證使用JavaScript,即使您獲得該OAuth令牌,您也無法通過CORS或JSONP使用該令牌。爲了安全起見,我們放棄了跨域請求的所有身份驗證標頭,因爲這是XSS攻擊的一個向量。更多這裏:https://dev.socrata.com/docs/cors-and-jsonp.html

    至於你的PHP libcurl請求發生了什麼,我不知道那裏發生了什麼。看起來您的身份驗證令牌正在進入系統,基於您遇到的錯誤,但我的猜測是,您的OAuth令牌已損壞,或者在您嘗試使用該令牌時已過期。令牌具有約一小時到期時間窗口。

    編輯並解答您的OAuth令牌錯誤問題:更改您的/oauth/authorize網址以反映您嘗試使用的域驗證,而不是soda.demo.socrata.com。令牌與他們簽發的域名綁定。我會更新文檔以使其更清楚。

    +0

    瞭解客戶端。對於服務器端代碼,我在獲取包含我的訪問令牌的響應後立即發出受保護的資源請求,似乎排除了過期。這會導致腐敗,你會建議排除這個問題嗎? – duncanrager