我的Web服务使用基于JWT的授权承载令牌认证:
/v1/auth/signIn
发送有效的POST 来自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
Authorization
,其值为“ Bearer <xyz>
”(其中<xyz>
)为返回上述登录调用的<big_huge_string>
。相当基本的标准JWT东西。我正在尝试编写一个以“ Sign In Request ”开头的Postman集合,该集合成功登录并从服务中获取JWT令牌,然后在其中添加适当的HTTP请求标头每个后续呼叫。关于如何操作的任何想法:
<big_huge_string>
,该响应将从我的登录请求中返回?然后<big_huge_string>
保存为变量,并将其作为所有后续调用的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
的含义。有什么想法吗?!
答案 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)
。