【发布时间】:2017-04-17 02:24:01
【问题描述】:
我正在努力学习 Spring Security 的基础知识。
我希望达到的目标
我的系统仅用于 REST API 处理,/user/sign_in 上有一个登录端点 POST 和一些开放端点 - /prompt/, /prompt/{id}, /story/, /story/{id} 上的 GET,其余所有内容仅适用于经过身份验证的用户。
我有一个自定义身份验证过滤器,已放在BasicAuthenticationFilter 之前。我在这里分享我的 WebSecurityConfigurerAdapter 代码
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DemoAuthenticationProvider demoAuthenticationProvider;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/version", "/story", "/prompt").permitAll()
.antMatchers(HttpMethod.POST, "/user/sign_in").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(new DemoAuthenticationFilter(), BasicAuthenticationFilter.class);
http.csrf().disable();
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(demoAuthenticationProvider);
}
}
对于开放端点的匿名用户,我在过滤器中返回一个空身份验证令牌,我得到了
403 访问被拒绝
当我提到允许所有而不是仅对这些端点进行身份验证时,为什么需要身份验证令牌?以及如何正确实施它?
【问题讨论】:
标签: spring rest authentication spring-security spring-boot