基于自定义Token授权时,SpringSecurity中为何需禁用CSRF?
为什么基于Token的认证要禁用CSRF防护?
在你的Spring Security配置里禁用CSRF防护,核心原因和JWT认证的无状态特性以及CSRF攻击的原理直接相关:
- CSRF攻击的本质:CSRF是借助用户浏览器中已保存的会话凭证(通常是Cookie里的Session ID),在用户不知情的情况下发起跨域请求。浏览器会自动在跨域请求中携带目标站点的Cookie,这才让CSRF攻击成为可能。
- JWT认证的无状态特性:你的配置里设置了
sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS),说明系统完全不依赖Session维护用户状态。JWT Token通常放在请求头(比如Authorization: Bearer <token>)或前端localStorage中,浏览器不会自动在跨域请求里主动携带这些内容,也就没有CSRF攻击的基础。 - 禁用CSRF的必要性:如果不禁用CSRF防护,Spring Security会默认拦截所有非GET请求(POST/PUT/DELETE等),要求请求携带CSRF Token,这会给API调用添不必要的麻烦——你的认证体系根本不需要这套机制,反而会导致合法请求被拦截。
补充说明:如果你的JWT Token存放在Cookie中(且设置了HttpOnly和Secure),那仍需考虑CSRF防护,但你的配置明确是无状态模式,所以禁用CSRF是合理的。
你的完整配置类里的无状态设置和JWT认证逻辑,完全匹配禁用CSRF的场景,这样配置是正确的。
内容的提问来源于stack exchange,提问作者Matvey Androsyuk
相关产品推荐
相关产品推荐

