修复 Spring Security 中的角色授权
Spring Security 提供强大的授权机制,但不正确的配置可能会导致安全漏洞。本文解决了一个常见问题,即具有有限角色的用户可以访问为管理员保留的资源。
提供的代码片段使用内存中身份验证和 JDBC 身份验证来配置 Spring Security。虽然问题归因于从用户中选择用户名、密码 1,其中用户名=?查询,真正的罪魁祸首在别处。
问题源于authorizeRequests()方法中匹配器的顺序。 Spring Security 按顺序评估匹配器,第一个匹配决定授权决策。在这种情况下,以下匹配器:
.anyRequest().authenticated()
放置在基于角色的匹配器之前:
.antMatchers("/users/all").hasRole("admin")
因此,只要用户经过身份验证,所有请求都会被授权,无论其角色如何。要解决此问题,请重新排序匹配器,以便基于角色的匹配器优先:
protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .httpBasic() .and() .authorizeRequests() .antMatchers("/users/all").hasRole("admin") .anyRequest().authenticated() .and() .formLogin() .and() .exceptionHandling().accessDeniedPage("/403"); }
使用此修订后的配置,仅具有“user”角色的用户将被拒绝访问“/users/all”而具有“admin”角色的用户将具有访问权限。
配置 Spring Security 授权时记住匹配器的顺序很重要,以确保预期的安全策略是强制执行。
以上是为什么我的 Spring Security 基于角色的授权失败?的详细内容。更多信息请关注PHP中文网其他相关文章!