【发布时间】:2019-03-22 03:10:19
【问题描述】:
我有一个 Spring Boot REST 应用程序,它有两个主要部分:
- 我想用令牌保护 ajax 调用的 UI
- 我想要进行基本身份验证的公共端点
据我了解,我无法使用 CSRF 令牌保护公共端点,因为它们需要会话。问题是,有些端点需要两者都可以访问,那么当 UI 使用 CSRF 并禁用基本身份验证的 CSRF 时,如何使用 CSRF 保护它们?
这是我目前拥有的,我完全禁用 csrf 以便基本工作......
http.requestMatchers().antMatchers("/form/fill", "/form/fill/*", "/form/fillParams", "/form/fillParams/*").and()
.csrf().disable().authorizeRequests().anyRequest().hasAnyRole(SecurityConfiguration.ROLE_FORMS_AUTHOR,
SecurityConfiguration.ROLE_FORM_FILLER, SecurityConfiguration.ROLE_ADMIN)
.and().httpBasic();
编辑:我找到了this 旧答案,我想知道是否有一种方法可以针对我的情况利用它,但我仍然不确定如何区分“本地”用户和经过身份验证的用户httpBasic()
【问题讨论】:
-
对于公共 url 使用 .permitAll() 并且对于任何请求都应该进行身份验证。
-
@kj007 也许我表述错误,但是“公共”的仍然应该用 httpBasic 保护,但是 httpBasic 和 CSRF 令牌不会一起工作,除非你有额外的“握手”请求来检索令牌,这将使 RESTful 失效。
标签: spring-security