从一个Postman请求中挖出标头,然后将其注入其他

时间:2018-09-04 01:58:06

标签: rest jwt postman bearer-token

我的Web服务使用基于JWT的授权承载令牌认证:

  1. HTTP客户端使用有效的JSON请求实体(包括用户名和密码信息)向/v1/auth/signIn发送有效的POST
  2. 如果他们成功进行了身份验证,则该端点将作为HTTP响应标头的auth承载令牌发回(从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 <xyz>”(其中<xyz>)为返回上述登录调用的<big_huge_string>。相当基本的标准JWT东西。

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

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

谢谢!


更新

尝试了建议:

enter image description here

距离越来越近,但是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的含义。有什么想法吗?!

1 个答案:

答案 0 :(得分:1)

一旦有了该令牌值,就可以使用{{token}}语法在每个请求标头中引用它。获得Auth标头中的登录更为困难。

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

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

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

当您获得该值时,它只是将其全局保存的基本pm.globals.set('token, pm.response.headers.toObject().Authorization)