2012-01-04 61 views
3

我正在爲一個網站編寫附加服務,該網站利用現有的登錄行爲,同時需要用戶提供一些額外的註冊詳細信息。新服務在不同的子域中運行。如何確保http請求來自特定用戶?

用戶將能夠在我的數據Web應用程序上創建資源,這些資源必須針對該用戶的數據收集進行保存。

我期望這個用戶標識符將被傳遞給http請求主體中的webapp。但是,我擔心惡意攻擊可能會重寫正文中的用戶名,以使請求看起來好像來自其他用戶。

我該怎麼做才能讓這個安全? (而這是否算作一個CSRF攻擊?)

新的服務是用Java編寫的,使用Spring 3

+0

當你說春3你是否也指春安? – Eugene 2012-01-04 17:35:40

+0

不,所有當前的安全性由主應用程序處理,我們無權訪問它,除了檢索當前的用戶guid和名稱。 – laura 2012-01-05 07:49:33

回答

5

你永遠不能保證一個http請求來自一個特定的用戶,你只能嘗試驗證一個用戶和一個請求。通常這是通過在登錄或認證過程中創建票證,然後在隨後的請求中要求票證來完成的。然後,您可以將該票據與用戶相匹配,並接受該票據有效。該票證在一段時間不活動後過期,需要用戶再次登錄。

+0

謝謝,這是我想要做的 - 如果沒有可能的魔法。 – laura 2012-01-05 07:51:38

+0

除了不活動時間之外,添加絕對會話時間將使其更安全。例如,20分鐘不活動或4小時絕對和重新認證以及新票據生成。 – LaJmOn 2012-03-02 13:48:03

+0

雖然您不能相信IP地址和推薦人的主機信息(兩者都可能被欺騙),但如果您獲得的IP /推薦人不是預期的,您可以(也應該)需要重新授權,因爲可能有錯誤。 – LaJmOn 2012-03-02 13:51:18

0

如果可能的話,您應該通過主網站使用的相同安全堆棧傳遞請求。

如果這是不可能的,我會使用Spring Security來處理身份驗證。我不確定Spring Security有哪些插件可用於驗證這樣的服務請求,但是您可以始終要求爲會話使用cookie,然後這只是客戶端處理驗證步驟的問題。因此,您可以使用「正常」表單登錄,或者可以將令牌請求設置放在一起,但涉及更多。