如何从 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,并简单地将&_csrf=<token>
添加到我的帖子 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 客户端发送注销消息?