2012-06-02 53 views
6

S.O.有許多優秀的問題(和答案)。圍繞着REST和安全問題。許多人說「純粹主義者不會喜歡這個,但是等等......」然後其他人說「你永遠不應該這樣做,因爲等等等等」。授權RESTful服務的實用示例?

但我還沒有看到解決方案「純粹主義者」暗示以下情況。所以我的問題是 - 什麼是以下場景的「純RESTful解決方案」?

簡單的場景...

試想建庫/網站,讓用戶管理他們最喜愛的食譜。該網站公開了一個RESTful API,以便用戶可以從他們想要編寫的自定義程序(利用此API)查詢和操作他們的列表。

因此,用戶「A」有3個最喜歡的食譜,ID爲「1」,「2」和「3」。

用戶「B」有2個最喜歡的食譜,ID爲「4」和「5」。

我們需要確保如果用戶A發送DELETE命令到/Recipes/4他將得到一個Forbidden (403)響應。

我通常會做...

我通常會做的是讓他們先調用的驗證方法,並把他們某種身份驗證令牌,其有效期爲30分鐘左右。通常這個令牌將通過cookie傳遞。

什麼是純解決方案?

純REST解決方案是否讓它們將它作爲查詢字符串中的變量傳遞? Are cookies the devil?令牌應該作爲URL的一部分使用(而不是查詢字符串參數)?還有其他的東西可以清楚地回答這個問題嗎?

+1

這裏有點迂迴:我想你的情況下,你會想要一個403,而不是一個401。身份驗證與服務,但在你的情況下,用戶A是_forbidden_​​得到食譜4.我知道它doesn沒有回答這個問題,但值得指出。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html顯示了區別。 (重新認證不會幫助用戶A看到配方4,因此是403)。 –

+0

正確 - 實際上任何一個都是問題...首先401 - 如同,您是授權的,其次是403 - 如同您的「權限是什麼」 「 - 進入狀態/會話/用戶上下文辯論......無論哪種方式,問題依然存在。感謝您的澄清! –

+2

是的,兩者都很重要。最簡單的解決方案當然是基於https的基本身份驗證。我認爲這是「純粹的」。你在尋找替代品嗎? –

回答

4

登錄時,你得到了驗證令牌資源路徑令牌在授權頭。這就是它的設計目的。請參閱http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p7-auth-12.html

+0

我喜歡這個想法,但它看起來像我可能會不正確地使用認證頭...我會繼續看如果這是「正確」:) –

+0

@TimothyKhouri你看到什麼讓你認爲你會濫用auth頭部? –

+0

該頭文件似乎特定於基本和摘要訪問驗證:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.8 –

0

一個簡單的無狀態和餅乾免費解決方案將給每個用戶一個相同的令牌。

有一些方法可以生成這些令牌,以便它們足夠稀疏以防出現安全問題。

例如https://www.grc.com/passwords.htm

假設你用戶A和用戶B你生成用戶A的令牌X和用戶B的令牌Ÿ

所以用戶A將使用類似/X/Recipes/1

和用戶B將使用類似/Y/Recipes/4

這是安全的,因爲用戶A是唯一知道他的令牌的人,正如我之前提到的,生成令牌的方式可以確保其他人猜測該令牌的「不可能」。

因此,如果其他人(如用戶B在URL中使用其他標記,比如說/Z/Recipes/1),則應該能夠識別並返回相應的錯誤消息。

您可以讓用戶在url中傳遞令牌,如上所示,或將其作爲Autherticantion消息嵌入到HTTP請求中。

+0

你的意思是一個獨特的令牌嗎?如果它們都具有相同的標記,那麼任何人都可以刪除任何東西... – evanmcdonnal

+1

我不太會遵循......我認爲問題仍然存在 - 它們如何傳遞該「密碼」 - 它是否與查詢字符串中的每個請求一起,帖子,cookie等 - 此解決方案具有相同的問題。 –

+0

@TimothyKhouri上面看到我的更新,讓我知道如果這回答你的問題.. – xvatar

1

將auth令牌視爲資源。

您通過獲取參數爲憑據的身份驗證令牌進行身份驗證(例如,基於https的基本身份驗證)。

註銷通過執行刪除操作中。

+0

對,但他們如何傳遞令牌是同一個問題。是通過查詢字符串,標題等,我覺得我現在重複了這個評論4次 - 顯然這是一個尚未(明確)回答的問題。此外,是否有效/純粹讓他們通過標頭或cookie傳遞令牌? –

+0

通過標題。這應該是有幫助的:http://stackoverflow.com/questions/549/the-definitive-guide-to-forms-based-website-authentication。這適用於任何方法,RESTful或不。使用純粹的RESTful方法,認證令牌被視爲資源,以便它不是一個古怪的RPC – matb33