Spring 安全 oauth/form 身份验证和 CSRF - 它们可以一起工作吗?

Spring security oauth/form authentication and CSRF - can they work together?

我已经了解了 spring 安全和 oauth 身份验证的各种示例。我让它工作,但并不完全令我满意。我正在使用 java 配置。

关键问题是我只想在某些网址上应用 oauth 身份验证。假设以“/api”开头的 url 需要具有 oauth,以“/app”(或任何其他 url)开头的 url 需要具有 CSRF 保护等优点的表单身份验证。

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

我已经尝试创建多个 WebSecurityConfigurerAdapter,其中包含启用 csrf 的不同顺序注释,但不知何故,从 ResourceServerConfigurerAdapter 扩展的配置总是获胜。我什至尝试过 csrf 请求匹配器,但没有成功。

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

推荐的最佳做法(至少对我而言)是始终使用 CSRF(安全总比遗憾好,如果您的客户端是浏览器,那么它应该被视为强制性的)。所以很遗憾 OAuth2 资源服务器将其关闭,我同意。快照中正在进行一些更改,a) 使其更易于自定义 (https://github.com/spring-projects/spring-security-oauth/issues/315) and b) might lead to teh default changing as well (https://github.com/spring-projects/spring-security-oauth/issues/339)。直到这些问题得到解决。我认为您唯一的选择是不使用 @EnableResourceServer 并编写您自己的相同版本。