2016-04-21 100 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

相关问题