mas*_*asa 11 spring csrf spring-security angularjs spring-boot
问题是让CSRF令牌在Spring Security和Angular之间运行.
用于Angular的Spring Security CSRF令牌拦截器似乎应该可以完成这项工作,但是来自服务器的HEAD响应中没有"X-CSRF-TOKEN".
我目前很小的实现在GitHub(Tag v.1.0
)中可用,如果知道该主题的人能快速查看代码,我会非常感激,问题应该很容易发现.
根据文档,我的印象是CSRF应该已经自动启用,但似乎并非如此.
我正在使用Spring Boot并且更喜欢基于注释的配置而不是XML,如果需要以不同方式配置某些内容.
使Spring Security能够对抗Angular的任何其他方法?
Dav*_*yer 10
Angular寻找一个名为"XSRF-TOKEN"的cookie,我相信,所以为客户端做的最简单的事情就是发送它.您可以在Filter
例如https://github.com/spring-guides/tut-spring-security-and-angular-js/blob/master/single/src/main/java/demo/UiApplication中执行此操作.java#L65):
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class
.getName());
if (csrf != null) {
Cookie cookie = new Cookie("XSRF-TOKEN", csrf.getToken());
cookie.setPath("/");
response.addCookie(cookie);
}
filterChain.doFilter(request, response);
}
};
}
Run Code Online (Sandbox Code Playgroud)
更新:自Spring security 4.2以来,如果您使用cookie csrf存储库(该链接仍然是最佳源),则默认使用angular的正确cookie名称,即不再需要自定义过滤器.例:
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
...
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18636 次 |
最近记录: |