【问题标题】:Spring security oauth/form authentication and CSRF - can they work together?Spring security oauth/form authentication 和 CSRF - 它们可以一起工作吗?
【发布时间】:2026-01-12 21:45:02
【问题描述】:

我已经浏览了各种 Spring Security 和 oauth 身份验证示例。我有它的工作,但并不完全令我满意。我正在使用 java 配置。

关键问题是我只想在某些 url 上应用 oauth 身份验证。假设以“/api”开头的 url 需要具有 oauth,而以“/app”(或任何其他 url)开头的 url 需要通过其好东西(如 CSRF 保护)进行表单身份验证。

这在我当前的配置中确实有效,但“/app”网址松散了 CSRF 保护。深入挖掘,看起来 ResourceServerConfig 调用 csrf.disable。所以 CsrfFilter 类永远没有机会。

我尝试使用不同的顺序注释创建多个 WebSecurityConfigurerAdapter 以启用 csrf,但以某种方式从 ResourceServerConfigurerAdapter 扩展的配置总是获胜。我什至没有运气尝试过 csrf 请求匹配器。

是否可以(选择性地)在使用 oauth 时启用 CSRF?推荐的最佳做法是什么?

【问题讨论】:

    标签: spring spring-mvc spring-security spring-security-oauth2


    【解决方案1】:

    推荐的最佳实践(至少由我推荐)是始终使用 CSRF(比抱歉更安全,如果您的客户端是浏览器,那么它应该被认为是强制性的)。所以遗憾的是 OAuth2 资源服务器将其关闭,我同意。快照中正在进行一些更改,a) 使其更易于自定义 (https://github.com/spring-projects/spring-security-oauth/issues/315),b) 也可能导致默认更改 (https://github.com/spring-projects/spring-security-oauth/issues/339)。直到这些问题得到解决。我认为您唯一的选择是不使用 @EnableResourceServer 并编写您自己的相同版本。

    【讨论】:

      最近更新 更多