【发布时间】:2019-02-08 23:43:17
【问题描述】:
我的网络服务使用基于 JWT 的授权不记名令牌身份验证:
- HTTP 客户端向
/v1/auth/signIn发送一个有效的 POST,其中包含一个有效的 JSON 请求实体(包括用户名 + 密码信息) - 如果他们成功进行身份验证,则该端点将身份验证承载令牌作为 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 请求标头包含,其键/名称为
Authorization并且其值为“Bearer <xyz>”(其中<xyz>)是到来的<big_huge_string>回到上面的登录电话。非常基本的标准 JWT 东西。
我正在尝试编写一个以“登录请求”开头的 Postman 集合,该集合成功登录并从服务获取 JWT 令牌,然后在其中添加适当的 HTTP 请求标头每个后续调用。关于我如何做的任何想法:
- 从我将从登录请求中返回的 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 是什么。有什么想法吗?!
【问题讨论】:
-
在应用程序的左下角寻找图标,它是第三个。这将打开一个新的控制台窗口。
-
此外,此时,如果正确,您会看到设置为全局变量的值。您可以在“环境快速视图”中检查这一点。这是右上角的眼睛图标。
to.not.be.null也是同一张支票。
标签: rest jwt postman bearer-token