2016-04-21 98 views
2

spring security docs爲的AccessDecisionManager:爲什麼默認的Spring Security策略是基於AffirmativeBased的?

默認的策略是使用下一個AffirmativeBased的AccessDecisionManager用的RoleVoter和AuthenticatedVoter使用。

AffirmativeBased選民:

授予訪問權限,如果的AccessDecisionVoter返回肯定響應

按照文檔的任何,RoleVoter就會基於經過驗證的對象是否具有根據對象是否通過身份驗證來糾正ROLE_權限,以及AuthenticatedVoter。

我的困惑是,什麼是AuthenticatedVoter對象投票?在我的應用程序中,我只希望有人使用ROLE_USER來訪問資源。但是我也在我的AbstractAuthenticationToken實現上設置了setAuthenticated(true)。

從閱讀文檔來看,基於AffirmativeBased的策略只需要通過認證就可以訪問資源,並且不會打擾ROLE的要求。是否存在實際正在檢查的不同「已驗證」值?

我知道UnanimousBased策略,但似乎我還沒有理解認證測試,否則在默認實現中會有一個很大的安全漏洞。

回答

2

當您配置授權時,您提供配置屬性,例如hasRole('admin')。投票期間,選民會檢查是否支持,否則會放棄投票。在AuthenticatedVoter的情況下,如果訪問配置爲Role,它將放棄投票。查看源代碼vote method

+0

好吧,所以身份驗證令牌的isAuthenticated值與屬性(例如「IS_AUTHENTICATED_FULLY」)是分開的。除非你主動設定一個資源必須具有該屬性的規則,否則它會棄權。 指向代碼的好答案,謝謝。 – TreeDescender

+0

我們有類似的問題。當我們來投票時,我們有一個角色屬性ROLE_ADMIN和IS_AUTHENTICATED_FULLY。 AuthenticatedVoter不會棄權並且使用可以訪問資源。即使角色是錯誤的。 – Gunslinger

+0

還有其他AccessDecisionManagers。例如,org.springframework.security.access.vote.UnanimousBased。檢查他人,並選擇適合您的案例或去定製實施。 – Adi

相關問題