Spring Security 为什么Spring授权服务器中的默认安全设置将CSRF配置为忽略OIDC端点?

gcuhipw9  于 2023-06-06  发布在  Spring
关注(0)|答案(1)|浏览(133)

我为我的授权服务器配置了CSRF预防,并注意到对端点oauth2/authorize的请求没有在CsrfFilter中匹配,因此OAuth2端点(以及oauth/tokenoauth/introspect等)不需要CSRF令牌。
我在配置SecurityFilterChain时应用了默认安全性:

OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);

其实现如下:

public static void applyDefaultSecurity(HttpSecurity http) throws Exception {
   OAuth2AuthorizationServerConfigurer authorizationServerConfigurer =
         new OAuth2AuthorizationServerConfigurer();
   RequestMatcher endpointsMatcher = authorizationServerConfigurer
         .getEndpointsMatcher();

   http
      .securityMatcher(endpointsMatcher)
      .authorizeHttpRequests(authorize ->
         authorize.anyRequest().authenticated()
      )
**      .csrf(csrf -> csrf.ignoringRequestMatchers(endpointsMatcher))
**      .apply(authorizationServerConfigurer);
}

我的问题是,为什么这是CSRF在授权服务器中的默认设置?我们在这些端点中是否安全免受CSRF攻击,如果是,您能否解释原因?

kyvafyod

kyvafyod1#

OpenID Connect规范定义了state参数,用于在身份验证/授权过程中避免CSRF攻击。对于其他情况,例如当您发送Bearer令牌时,也不需要CSRF保护,因为您(理论上)没有发送会话cookie(浏览器自动包含)

相关问题