【问题标题】:Scooping headers off of one Postman request and injecting them into others从一个 Postman 请求中提取标头并将其注入其他请求
【发布时间】:2019-02-08 23:43:17
【问题描述】:

我的网络服务使用基于 JWT 的授权不记名令牌身份验证:

  1. HTTP 客户端向/v1/auth/signIn 发送一个有效的 POST,其中包含一个有效的 JSON 请求实体(包括用户名 + 密码信息)
  2. 如果他们成功进行身份验证,则该端点将身份验证承载令牌作为 HTTP 响应标头发送回,该标头(来自 curl)如下所示:

来自curl的回复:

HTTP/1.1 200 OK
Date: Tue, 04 Sep 2018 01:18:28 GMT
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Access-Control-Expose-Headers: Authorization
Authorization: Bearer <big_huge_string>
Content-Length: 0
  1. 随后对经过身份验证的端点的服务调用只需将令牌作为 HTTP 请求标头包含,其键/名称为 Authorization 并且其值为“Bearer &lt;xyz&gt;”(其中&lt;xyz&gt;)是到来的&lt;big_huge_string&gt;回到上面的登录电话。非常基本的标准 JWT 东西。

我正在尝试编写一个以“登录请求”开头的 Postman 集合,该集合成功登录并从服务获取 JWT 令牌,然后在其中添加适当的 HTTP 请求标头每个后续调用。关于我如何做的任何想法:

  1. 从我将从登录请求中返回的 HTTP 响应标头中提取 &lt;big_huge_string&gt;?然后
  2. 如何将 &lt;big_huge_string&gt; 保存为变量并将其作为 HTTP 请求标头注入所有后续调用?

提前致谢!


更新

尝试了这个建议:

越来越近,但console.log(...) 没有向 Postman 打印任何内容(或者至少我不知道在哪里可以找到它)。我应该提到我不是使用 Postman 的 Chrome 应用程序版本,而是使用独立的应用程序/可执行文件(版本 6.1.4):

任何想法如何/在哪里可以让console.log(...) 工作?我担心只是将测试更改为:

pm.test("Can Extract JWT", function() {
   var authHeader = pm.response.headers.toObject().Authorization;
   pm.expect(authHeader).to.not.be.equal(null);
   pm.globals.set('token', authHeader)
});

甚至没有先看到authHeader 是什么。有什么想法吗?!

【问题讨论】:

  • 在应用程序的左下角寻找图标,它是第三个。这将打开一个新的控制台窗口。
  • 此外,此时,如果正确,您会看到设置为全局变量的值。您可以在“环境快速视图”中检查这一点。这是右上角的眼睛图标。 to.not.be.null 也是同一张支票。

标签: rest jwt postman bearer-token


【解决方案1】:

一旦您拥有该 Token 值,您就可以使用 {{token}} 语法在每个请求标头中引用它。更难的部分是登录 Auth 标头。

您可以使用pm.response.headers 获取标头列表,然后提取您需要的值。

这是作为列表返回的,因此可能使用 Lodash 之类的东西或将其转换为对象可以帮助获得所需的值。类似于pm.response.headers.toObject().Authorization - 我还没有尝试过,所以我的语法可能有点错误。

您可以将标头记录到 Postman 控制台并以这种方式缩小范围 - 只需将其包装在 Console.log() 语句中即可。

当您获得该值时,只需一个基本的pm.globals.set('token, pm.response.headers.toObject().Authorization) 即可将其全局保存。

【讨论】:

  • 谢谢@Danny (+1) 我真的在这里感谢您的回答。我正在努力让console.log(...) 工作(所有事情),请参阅我上面的编辑。有任何想法吗?再次感谢!
  • 这回答了最初的问题吗?
  • 它似乎无法正常工作,但无法访问控制台日志的任何位置,我无法判断 pm.response.headers.toObject().Authorization 在运行时的评估结果...
  • 查看我对原始问题的评论。 “前往应用程序菜单中的查看,然后单击“显示 Postman 控制台”或使用键盘快捷键(CMD/CTRL + ALT + C)。”
猜你喜欢
  • 1970-01-01
  • 2011-05-09
  • 2020-11-24
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多