56

我在 spring 框架中有csrf 保护。因此,在每个请求中,我从 ajax 调用的标头中发送 csrf 令牌,这是完美的工作。

<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>

var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");

在阿贾克斯

beforeSend: function(xhr) {
                xhr.setRequestHeader(header, token),
                xhr.setRequestHeader("username", "xxxx1"),
                xhr.setRequestHeader("password", "password")
            }

我不知道生成 csrf 令牌并包含在 Postman Rest Client 的标题部分中吗?您能帮我从 Postman Rest Client 发送 csrf 令牌吗? 在此处输入图像描述

4

7 回答 7

46

始终如一地执行此操作的最简单方法,因此您不必每次都获取令牌:

注意:您需要安装 PostMan Interceptor 并激活它才能访问浏览器 cookie

  1. 创建一个新环境,以便可以存储环境变量

在此处输入图像描述

  1. 使用测试创建登录方法以将 XSRF cookie 存储在环境变量中,在测试选项卡中发布此代码

    //Replace XSFR-TOKEN with your cookie name
    var xsrfCookie = postman.getResponseCookie("XSRF-TOKEN");
    postman.setEnvironmentVariable("xsrf-token", xsrfCookie.value);
    

编辑 对于使用 5.5.2 postman 或更高版本的任何人,您还必须解码 cookie,并且正如@Sacapuces 指出的那样,他们还提供了获取 cookie 的替代方法

pm.environment.set("xsrf-token", decodeURIComponent(pm.cookies.get("XSRF-TOKEN")))

现在您将拥有一个带有 xsrf-token 的环境变量。

  1. 保存您的登录方式

  2. 创建您要创建的新帖子并在标题中添加您的 XSRF-Token-Header 密钥,并在句柄栏中添加环境变量以访问它{{}}

在此处输入图像描述

  1. 现在在运行你的新请求之前确保你运行你的登录,它将存储环境变量,然后当你运行实际请求时它会自动附加它。
于 2016-03-10T19:23:40.630 回答
10

我可以按照以下步骤发送带有 csrf 令牌的 REST:

  1. 登录时 Spring Security 自动生成的 CSRF 令牌。它将显示在响应头中。

  2. 通过在标头上设置 X-CSRF-TOKEN 和 CSRF 令牌,可以在后续请求中使用 CSRF 令牌。

于 2015-02-04T07:43:45.383 回答
8

首先,您需要安装 PostMan Interceptor 并激活它以访问浏览器 cookie。

  1. 您必须通过发出 GET 请求来获取 CSRF 令牌:标头:“XSRF-TOKEN”和值:“Fetch”

  2. 您应该在 cookie 选项卡中看到 Token 并可以复制它(注意:您可以配置 spring 如何命名 cookie。也许您的 cookie 的名称不是“XSRF-TOKEN”。注意:您已删除此空白字符换行符的令牌)

  3. 现在发出您的 POST 请求并将标头设置为:标头:“X-XSRF-TOKEN”和值:“您复制的不带空格的令牌”

于 2015-10-03T12:11:53.237 回答
3

对我来说,将 X-CSRF-TOKEN 添加到标题中的工作变体。 在此处输入图像描述

于 2015-10-28T10:57:18.983 回答
2

请将X-CSRF-Token作为 key 并将FETCH作为 value 在 GET 请求头中,您将在响应头中收到令牌

于 2018-09-05T09:46:12.497 回答
1

如果您不想配置环境变量等,这是最快的解决方案

https://stackoverflow.com/a/49249850/3705478

于 2018-03-13T06:46:30.973 回答
0

我已经使用 csrfTokenRepository() 来允许 spring security 生成 csrf 令牌

@EnableWebSecurity
public class AppSecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    // TODO Auto-generated method stub
    http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    // your code
    } 
}

添加这几行代码后,使用 GET 请求生成 csrf 令牌。我使用过邮递员,并在响应 cookie 部分获得了令牌。复制令牌并在 POST 调用中使用它。

官方文档链接: https ://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/csrf.html

于 2022-03-02T22:37:29.450 回答