我正在使用 Spring Webflux、Security、Session 和 Redis。似乎一旦在像下面這樣的安全配置中設定了“csrfTokenRepository”,SESSIONcookie 就不再被設定為正常回應的一部分。正在播放的場景是 SPA 使用基本身份驗證并隨后設定X-XSRF-TOKEN和X-Auth-Token用于未來的 AJAX 呼叫的場景。
請注意,XSRF-TOKEN訂閱Mono<CsrfToken>. 手頭的唯一問題是,在給定的場景下,沒有SESSION設定任何意外的 cookie。
@Bean
fun webHttpSecurity(http: ServerHttpSecurity): SecurityWebFilterChain {
return http {
securityMatcher(PathPatternParserServerWebExchangeMatcher("/web/**"))
httpBasic { }
authorizeExchange {
authorize("/web/login", permitAll)
authorize(anyExchange, authenticated)
}
csrf {
csrfTokenRepository = CookieServerCsrfTokenRepository.withHttpOnlyFalse()
}
}
}
如果我們注釋掉csrfTokenRepository如下所示的 SESSION設定,就會按預期設定一個 cookie。此行為發生在多個版本的 Spring Boot 中,包括 2.7.4。
@Bean
fun webHttpSecurity(http: ServerHttpSecurity): SecurityWebFilterChain {
return http {
securityMatcher(PathPatternParserServerWebExchangeMatcher("/web/**"))
httpBasic { }
authorizeExchange {
authorize("/web/login", permitAll)
authorize(anyExchange, authenticated)
}
csrf {
// csrfTokenRepository = CookieServerCsrfTokenRepository.withHttpOnlyFalse()
}
}
}
uj5u.com熱心網友回復:
默認的 CSRF 令牌存盤庫是基于會話的。這意味著他們將根據需要創建一個新的會話實體。發生這種情況時,會設定一個 cookie,因為已經創建了一個會話實體。
當默認 CSRF 令牌與 CookieServerCsrfTokenRepository 交換時,默認情況下不再創建會話,因此不會設定會話 cookie。
這里的關鍵見解是默認 CSRF 存盤庫是基于會話的,而 CookieServerCsrfTokenRepository 沒有會話行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/517222.html
標籤:春天弹簧靴弹簧安全spring-webflux春季会议
上一篇:來自第三方的深度嵌套JSON回應
