2009-11-04 65 views
40

另一分鐘我閱讀了關於OAuth的文章。它特別描述了在一系列請求期間客戶端和服務提供商之間交換的令牌。REST中的OAuth令牌和會話

文章還提到,OAuth的收益顯著普及RESTful API中的授權層。據我瞭解,REST應該保持完全無狀態。

的問題:難道這不是重複令牌交換,魚雷REST的「無狀態」的原則?恕我直言,令牌可以被看作是一種會話ID,不是嗎?

回答

76

的OAuth令牌是明確的會話標識,互動是不是因爲要求必須以特定的順序來進行OAuth令牌協商協議的請求之間的無狀態的,他們確實需要每個客戶端存儲在服務器上,因爲你需要跟蹤他們發佈時的情況。所以是的,OAuth確實違反了RESTful架構的嚴格原則。

不幸的是,真實世界TM與我們需要做的事情相抵觸,比如允許應用程序代表個人進行身份驗證而不要求他們的密碼,而OAuth相當不錯。沒有這種狀態就不可能實現類似的安全認證方案。事實上,OAuth(1.0a)所要求的變化之一是將更多狀態添加到令牌協商協議以減輕安全風險。

所以,它魚雷REST的無狀態的原理是什麼?是。這很重要嗎?除非你生活在象牙塔:-)

+11

我喜歡Real World(TM)。感謝你的回答! – Boldewyn

+6

+1爲使現實世界爲REST –

+4

一旦OAuth認證已被處理,但是,它可以有效地無狀態 - OAuth令牌是由客戶端存儲,並在授權標題中的每個REST請求一起發送。 –

6

認證是在網絡交互處理時必須以某種方式跟蹤的狀態。最終,如果你的應用程序是寧靜的,服務器必須能夠跟蹤每個用戶的「身份驗證狀態」,不幸的是,這需要某種規避HTTP的底層無狀態性質和任何額外的傳輸/技術(如REST)它。

因此,開發任何類型的身份驗證的應用程序的,國家的原則必須鞋企有角的地方,如果這恰巧是在REST的頂部OAuth的,那是註定的!