2011-04-27 176 views
13

我需要就如何確保我的應用提出了一些建議:使用Spring MVCREST認證/授權

我有一個REST服務,3

我有我的客戶端應用程序,使用分機GWT 2.2

用戶憑證僅在服務器端提供。

SSL提供

REST服務只能由authentificated用戶使用。

我看了一下HTTP摘要,基於令牌的授權,OAuth的等等,但我需要一些澄清,並就如何確保我的使用建議,以及哪些方法是在我的情況是最好的。

回答

26

這裏是我們爲應用程序創建的方法,效果非常好,而且非常安全。

這是一個非常概念化的解釋,有很多的代碼實現此起來,FYI

  • 當用戶進行身份驗證或創建帳戶,服務器返回的X.509證書,base64編碼,即對用戶來說是獨一無二的。服務器存儲一份副本。

  • 每次客戶端需要訪問的REST API,客戶端創建由以下的JSON字符串。

  • 的用戶唯一ID(用戶名)

  • 一個GUID或UUID,即保證這個通話是獨一無二的,(呼叫標識)(防止重放攻擊)
  • 詞典(鍵/值的集合)其餘的通話

的每個參數我們再加密與X.509公鑰字符串,並對其進行編碼回的base64字符串,並藉此加密值和用戶ID添加到一個JSON對象我們稱之爲令牌。

然後我們把令牌到每個通話的頭,並調用它是這樣的:X-AUTH-UserToken

在每次調用服務器取令牌,查找基於用戶ID的用戶證書,然後驗證令牌的加密部分可以用服務器爲用戶保存的私鑰解密。

一旦解密,該服務器採用呼叫標識並驗證它是獨一無二的,對自己的calllog分貝。

如果簽出,則用戶通過身份驗證。

一旦用戶通過驗證後,就可以根據用戶的應用UNIQUEID自己的授權規則。

當然,以上所有都是通過SSL。

讓我知道如果你需要我深入的任何部分。

+0

太棒了!我一直在尋找這個。 – Mikecito 2011-04-27 22:29:30

+0

您可能想要查看WebID http://www.w3。org/wiki/WebID這是一種標準化的方式來完成你似乎正在描述的內容。 – 2011-04-28 11:16:56

+0

服務器在用戶認證時通過SSL發送回臨時令牌時,會話是不是充分安全?如果連接已通過ssl保護,額外證書有什麼好處? – 2012-05-31 10:50:05