我正在廣泛閱讀文檔Spring 3.1 security documentation,但我無法找到所有問題的答案。如何使用db spring 3.1安全性實現每個用戶登錄/註銷的自定義SHA-256 salt?
在一個基於表單登錄(user + pwd)的spring web應用程序中,我希望用戶使用SHA-256密碼,併爲每個用戶使用隨機salt。這意味着我必須將salt和哈希密碼保存在每個用戶的數據庫中。目前沒有問題。
似乎很清楚,我要實現我自己的
UserDetailsService
從我的數據庫獲取我的用戶信息的,在我的spring-security.xml
配置。好像我會在我的執行
UserDetails
上添加一個額外的getSalt()
方法進行校驗通過對存儲的哈希密碼用戶提供的登錄信息時需要使其可用。
然後情況變得不清楚。我應該攔截登錄請求。從6.4.3節看來,Spring似乎將把用戶提交的憑證映射到Authentication
對象,並將其提交給AuthenticationManager
。
我的問題是:
i)如何實現Authentication
會彈出提交AuthenticationManager
?我如何檢索名稱和密碼?
ii)看起來我必須實施我自己的AuthenticationManager
。在每次撥打authenticate(...)
時,我都會提取登錄名和密碼,從數據庫中獲取UserDetails
。然後,將提供的pwd與相應的鹽進行散列並與數據庫散列項進行比較。正確?
iii)AuthenticationManager
API也有一個supports(...)
方法。它應該如何實施?
iv)如何配置Authentication
和AuthenticationManager
?
出於好奇,是否有一個特定的原因/要求,你選擇鹽你的用戶密碼? – Andre 2012-07-18 15:18:27
@Andre爲確保有人破壞數據庫,他們將無法訪問源密碼。 – JVerstry 2012-07-18 17:27:36
這就是我的想法。我只是想知道你是否需要真正儲存鹽。我經歷了很多次BCrypt,並最終在Spring Security中使用它;它工作得很好。看看這個線程:http://stackoverflow.com/a/8528804/323807 – Andre 2012-07-18 17:51:40