2017-02-27 53 views
0

我只是針對即將到來的項目的一些規範,並且偶然發現了Spring Security的AuthenticationProvider接口的細節。爲什麼在身份驗證(..)返回的身份驗證對象仍然需要包含憑據?

對於方法Authentication authenticate(Authentication authentication) 返回的對象又是一個Authentication對象。根據來自Spring的java文檔,它表示返回值:

返回: 包含憑據的完全身份驗證對象。如果AuthenticationProvider無法支持傳遞的Authentication對象的身份驗證,則可能返回null。在這種情況下,將嘗試支持所提供的Authentication類的下一個AuthenticationProvider。

爲什麼在成功通過身份驗證後對象仍然包含憑據?這對我沒有意義。認證之後,我想立即清除有關憑證的所有信息,或者爲什麼不應該?

回答

1

春季安全刪除敏感的憑據信息,請參閱Spring Security Reference

10.1.1上成功驗證

刪除證書默認情況下(使用Spring Security 3.1起)的ProviderManager將嘗試清除身份驗證請求返回的身份驗證對象中的任何敏感憑據信息。這可以防止密碼等信息被保留超過必要的時間。

例如,當您使用用戶對象緩存時,這可能會導致問題,以提高無狀態應用程序的性能。如果Authentication包含對高速緩存中的對象的引用(例如UserDetails實例),並且已刪除其憑據,則無法再對緩存的值進行身份驗證。如果您使用緩存,則需要考慮這一點。一個明顯的解決方案是先創建對象的副本,無論是在緩存實現中還是在創建返回的Authentication對象的AuthenticationProvider中。或者,您可以在ProviderManager上禁用eraseCredentialsAfterAuthentication屬性。有關更多信息,請參閱Javadoc。

+0

謝謝,這正是我所期望的。所以Java文檔有點令人困惑,因爲它明確表示「包括憑證的完全驗證對象」。 –