我为我的授权服务器配置了CSRF预防,并注意到对端点oauth2/authorize
的请求没有在CsrfFilter
中匹配,因此OAuth2端点(以及oauth/token
,oauth/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攻击,如果是,您能否解释原因?
1条答案
按热度按时间kyvafyod1#
OpenID Connect规范定义了
state
参数,用于在身份验证/授权过程中避免CSRF攻击。对于其他情况,例如当您发送Bearer
令牌时,也不需要CSRF保护,因为您(理论上)没有发送会话cookie(浏览器自动包含)