如何从 Postman REST 客户端发送 spring csrf 令牌?

Posted

技术标签:

【中文标题】如何从 Postman REST 客户端发送 spring csrf 令牌?【英文标题】:How do I send spring csrf token from Postman rest client? 【发布时间】:2015-01-26 18:16:23 【问题描述】:

我在 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");

在 ajax 中

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

我不知道生成 csrf 令牌并包含在 Postman Rest Client 的标题部分中?您能帮我从 Postman Rest Client 发送 csrf 令牌吗?

【问题讨论】:

【参考方案1】:

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

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

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

    使用测试创建登录方法以将 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 的环境变量。

    保存您的登录方式

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

    现在在运行新请求之前,请确保运行登录,它将存储环境变量,然后当您运行实际请求时,它会自动附加它。

【讨论】:

建议修改 cookie 名称为:postman.getResponseCookie("XSFR-TOKEN")。这适用于基于 SpringBoot 1.4.2.RELEASE 的 JHipster 项目。如果这破坏了其他场景,请在 cmets 中告知或提出修改建议。 要找出您正在使用的邮递员版本,请单击“扳手”--> 从列表中选择“设置”--> 选择“关于”选项卡。您将看到邮递员版本。 @johnny5 您能否提供放置位置的屏幕截图 var xsrfCookie = postman.getResponseCookie("XSRF-TOKEN");和 postman.setEnvironmentVariable("xsrf-token", xsrfCookie.value);。请帮忙。 @user 我现在不在我的电脑前。但是在第一个屏幕截图中,您可以看到一个名为测试的选项卡。单击该选项卡并将代码放在那里 知道了。但它应该是 X-CSRF-TOKEN 还是 XSRF-TOKEN?当我为我的 web 应用打开 Chrome 控制台时,我看到密钥名称为 X-CSRF-TOKEN。【参考方案2】:

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

    登录时spring security自动生成的CSRF token,会在响应头显示。

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

【讨论】:

它对我有用,但有点不同,我从 cookie 选项卡中的 cookie 中获取 CSRF 令牌,并使用标题名称 X-XSRF-TOKEN 在 POST 请求的标题上使用它 我从 Spring Security 发回的标头中复制了 X-CSRF-TOKEN,并简单地将 &amp;_csrf=&lt;token&gt; 添加到我的帖子 URL 中。感谢您的帮助。【参考方案3】:

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

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

    1234563从换行符中删除令牌中的这个空白字符)

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

【讨论】:

【参考方案4】:

对我来说,将 X-CSRF-TOKEN 添加到标题中的工作变体。

【讨论】:

如何获取 csrf 令牌?【参考方案5】:

请将X-CSRF-Token作为键,FETCH作为值在GET请求头中,你将在响应头中收到令牌

【讨论】:

【参考方案6】:

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

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

【讨论】:

以上是关于如何从 Postman REST 客户端发送 spring csrf 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Postman 进行 Django Rest Framework 令牌身份验证

如何从Postman休息客户端发送spring csrf令牌?

如何从 Java REST servlet 向 Angular 客户端发送注销消息?

将文件从 REST Web 服务发送到客户端的正确方法是啥?

SpringBoot2---对rest风格的支持

DjangoRestFramework,解释器组件, Postman,