2013-05-13 124 views
29

在對我的REST API的每次調用中,我都要求客戶端傳遞用戶的Facebook訪問令牌,這會對用戶進行身份驗證。傳遞此令牌的最佳做法是什麼?客戶端應該如何將Facebook訪問令牌傳遞給服務器?

  1. 也許作爲HTTP問號

    GET /api/users/123/profile?access_token=pq8pgHWX95bLZCML 
    
  2. 在請求的首標

    或以某種方式,後面的參數類似於HTTP基本認證

  3. 也許第三種選擇? (我已經排除通過它的JSON,因爲我需要令牌獲得GET調用傳遞一樣,所以JSON將不適合那裏,我認爲)

回答

37

如果你看一下所有流行的提供的API端點OAuth提供商(Google,Facebook,Pocket,Git等),你會發現他們都擁有HTTPS端點。

,可以在其中通過訪問令牌到提供的方式是 -

ⅰ)作爲查詢參數 -

https://yourwebsite.com/api/endpoint?access_token=YOUR_ACCESS_TOKEN

ⅱ)在請求頭 -

GET /api/users/123/profile HTTP/1.1 
Host: yourwebsite.com 
Date: Tue, 14 May 2013 12:00:00 GMT 
Authorization: <YOUR_ACCESS_TOKEN> 

這兩種方法通常受到大多數API的支持。你可以考慮做同樣的事情。

III)袖珍API不使用GET可言。他們對所有請求使用POST,即使是檢索數據。查看這個link查看他們的文檔。請注意,他們使用POST來檢索數據並傳遞JSON參數。

+0

是的,我正在使用HTTPS。選項(i)和(ii)對我來說也可以,我不會去選項(iii)。在(ii)中,我是否應該包含* Basic *這個詞或其他的東西來表明我需要那個令牌? – 2013-05-14 09:32:29

+2

那麼,一般的想法是包括令牌類型......如果您使用的是無記名令牌類型,則可以擁有「授權:持有者」,這會告訴您的應用程序不尋找客戶端憑證。 – divyanshm 2013-05-14 10:57:30

+13

不推薦在查詢字符串中傳遞訪問令牌! HTTPS仍然以明文形式請求URL(包括查詢字符串參數)。只有標題和正文被加密! – 2014-02-21 01:26:57

相關問題