首页 文章

从一个 Postman 请求中挖出标题并将其注入其他请求

提问于
浏览
1

我的 Web 服务使用 JWT-based 授权承载令牌身份验证:

  • HTTP 客户端使用有效的 JSON 请求实体向/v1/auth/signIn发送有效的 POST(包括用户名密码信息)

  • 如果它们成功进行身份验证,那么该端点会发送一个 auth bearer 令牌作为 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
  • 对经过身份验证的端点的后续服务调用只需要将令牌包含为 HTTP 请求标头,其 key/name 是Authorization且其值为“Bearer <xyz>”(其中<xyz>)是在上面的登录呼叫中返回的<big_huge_string>。非常基本的标准 JWT 东西。

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

  • 从我的登录请求中获取的 HTTP 响应标头中提取<big_huge_string>?然后

  • 如何将<big_huge_string>保存为变量并将其作为所有后续调用的 HTTP 请求标头注入?

提前致谢!


更新

试过这个建议:

在此输入图像描述

越来越近了,但是console.log(...)并没有给 Postman 打印任何东西(或者至少我不知道在哪里寻找它)。我应该提到我没有使用 Postman 的 Chrome 应用程序版本,而是使用独立的 app/executable(版本 6.1.4):

任何想法 how/where 我可以工作?我担心只是将测试更改为:

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甚至是什么。有任何想法吗?!

1 回答

  • 1

    获得该 Token 值后,您可以使用{{token}}语法在每个请求标头中引用它。它在 Auth 标题中的标志是更难的部分。

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

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

    您可以将 Headers 记录到 Postman 控制台并将其缩小到 - 只需将其包装在Console.log()语句中。

    当你得到这个值时,全局保存它只是一个基本的pm.globals.set('token, pm.response.headers.toObject().Authorization)

相关问题