2013-10-31 76 views
4

我使用Spring MVC和Spring HateOAS來創建一個寧靜和無狀態的JSON API。鏈接是否應該在HateOAS中包含認證令牌?

一切工作正常。但我有一個「概念」問題。我的API在每個請求中使用身份驗證令牌。例如,您使用的登錄API,讓您的身份驗證令牌,當你打電話給我的API,你必須使用這樣的:

http://some_host/api/foo/bar?token=abcd 

的API總是迴應JSON和鏈接通過Spring HATEOAS產生。例如:

{ 
    "label" : "foo", 
    "links" : [ 
     "rel" : "self", 
     "href" : "http://some_host/api/foo/bar/1234656" 
    ] 
} 

問題是:我應該在生成的URL中添加身份驗證令牌嗎? (所以這將是http://some_host/api/foo/bar/1234656?token=abcd

我找不到任何建議或約定。

回答

2

通常,身份驗證令牌通過標準HTTP頭(例如HTTP Basic或摘要中的授權頭)進行通信。另一個常見的是通過cookie。在Servlet環境中,這通常是JSESSIONID cookie。

一般而言,您不應該看到身份驗證令牌作爲請求URL的一部分傳遞。

+0

實際上,API可以通過多種方式處理身份驗證令牌。我們可以在自定義HTTP令牌中處理令牌,我們處理HTTP基本認證,並且在查詢字符串中處理令牌。 – Magus

+1

我知道它*可以*在查詢字符串中處理令牌,但它可能不應該。我的觀點是,你可能沒有看到關於這個主題的大量建議,因爲很少有人這樣做(他們使用標題)。 –

0

這是一個老問題,但答案肯定不是。

http://some_host/api/foo/bar/1234656應該是制服該資源的標識符(URI)和位置(URL)。這是您可以信賴的一個網址。您始終可以使用該URL獲取資源,但您再也不會使用http://some_host/api/foo/bar?token=abcd獲取資源,因爲令牌將過期。

使用追加的標記調用URL是一回事,但它永遠不會出現在鏈接中,因爲它與資源無關。發送令牌是客戶的責任,而不是服務器的責任。