当前位置: 首页 > 知识库问答 >
问题:

如何为spring boot生成的XSRF令牌cookie设置最大年龄

万俟财
2023-03-14

我正在启用csrf保护,并使用spring boot设置XSRF-TOKEN cookie

在浏览器中,我看到cookie按预期设置,但没有任何费用。我有这些问题

  1. 是否有一种方法可以设置此cookie的最大年龄,或使其在会话到期时过期

这是我的springboot代码

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
    .antMatchers("/**").permitAll()
    .and().csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}

共有1个答案

邓业
2023-03-14

是否有一种方法可以设置此cookie的最大年龄,或使其在会话到期时过期?

不需要更改cookie的最大年龄,因为默认情况下,CookieCsrfTokenRepository会创建它,这样它就不会持久存储。它通常会在浏览器关闭时被删除:

cookie.setMaxAge(-1);

但是如果您真的想更改它,您必须编写自己的CsrfTokenRepository实现,因为尽管覆盖saveToken(…)会很好CookieCsrfTokenRepository的方法,您不能这样做,因为它是一个最终类。相反,除了saveToken(…)之外,您可以使用composition并让实现委托给每个方法调用的CookieCsrfTokenRepository对象 ,这是您编写自定义cookie逻辑的地方。然后将其添加Web安全配置适配器中:

protected void configure(HttpSecurity http) throws Exception {
    http.
    ...
    .and().csrf()
    .csrfTokenRepository(new MyCustomCookieCsrfTokenRepository());
}

再一次,仔细考虑这是否必要。

为了更好的安全性,我应该在会话中存储XSRF令牌而不是cookie吗?

好吧,如果有人可以偷你的饼干,理论上他们也可以偷你的会话。如果您可以在服务器中维护cookie值的状态,那么继续。但如果没有,就继续吃饼干。Spring Security负责处理细节。

使用AngularJS作为前端,springboot作为备份,实现CSRF保护的最佳方法是什么?

一种方法是将CRSF令牌作为cookie发送,并让您的ANGularJS应用程序在“X-XSRF-TOKEN”标头中或作为名为“_csrf”的请求参数发送令牌。

如果你想在会话中存储CSRF值,你需要有一种方法让你的AngularJS应用程序知道它。传统上,在非单页设置中,可以将其作为隐藏参数写入表单中。但由于这不是您的情况,您可能希望继续使用cookie。

 类似资料:
  • 我正在更改后端每个请求的xsrf令牌cookie值。我一次对服务器进行多个http调用,但对于某些请求,“xsrf cookie”值和“x-xsrf-header”值不相同。 我试图通过参数手动添加x-xsrf-标头,但标头值不是最新的。 这是我试过的代码,

  • 问题内容: 我有一个使用elasticsearch-jetty项目的嵌入式Elasticsearch,并且我需要设置为比默认值更好地使用标记器。我想使用关键字标记器。 我一辈子都想不通如何通过配置文件来做到这一点。谁能指出我通过配置文件执行此操作的方法? 顺便说一句,是否可以通过对索引执行POST来在启动和运行时调整索引?我真的很想了解如何使用它,谢谢。 编辑/更新:我在将curl -XPUT或-

  • 用于初始化会话的Web API方法正在成功返回cookie。前端是angular的,所以我调用cookie XSRF-TOKEN,因为angular说它将接受该值,并在所有后续请求中将其转换为名为X-XSRF-TOKEN的头。 作为参考,创建cookie的WebAPI获取控制器方法如下 使用Fiddler,我可以在响应中看到cookie。现在我期待两件事 对同一域的所有后续API调用应在请求头中包

  • Spring OAuth2实现多因素身份验证的完整代码已经上传到文件共享站点的这个链接。下面给出了在几分钟内在任何计算机上重新创建当前问题的说明。

  • 我使用Cognito用户池来保护我的API网关。现在我想使用邮递员向我的应用编程接口发出请求,但是我需要传递授权令牌,因为应用编程接口是安全的。是否有任何AWS CLI命令或REST API来生成授权令牌(通过传递用户名/密码)?我已经搜索了留档,但找不到任何例子。谢谢你的帮助。

  • 我有访问令牌和刷新令牌。但是访问令牌过期后几个时间,所以我想从刷新令牌为谷歌驱动器API生成访问令牌。所以给我的想法或代码,从谷歌驱动器API刷新令牌生成访问令牌。