Spring:以编程方式生成新的 csrf 令牌

Cod*_*nor 5 java spring spring-mvc csrf spring-security

我正在尝试制作一个将在单个 HTML 页面上运行的 Web 应用程序,该页面将允许用户通过 JavaScript 和 ajax 与服务器进行交互。我想通过在每个请求中包含 csrf 令牌来确保我的请求免受 csrf 攻击。

因为我的 web 应用程序只能在单个页面上运行,所以我无法在视图中使用 ${_csrf.token} (或类似的语法),因为视图将是一个 json 对象。相反,我想要一个像“/security/csrf”这样的网址,它返回与用户会话关联的令牌。(是的,这绝对不是一项令人放松的服务。)

有什么方法可以生成 Spring Security 在验证登录时能够访问的 csrf 令牌吗?另外,以这种方式使用 csrf 令牌是否存在缺陷?

Nei*_*gan 2

每个请求的令牌将终止缓存。每个会话的令牌同样安全。

在您的第一个 html 响应中,将 csrf 令牌包含在元标记中,如文档所述:http ://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html#csrf-包含 csrf 令牌 ajax

您可以在请求之间使用相同的令牌(在同一会话中)