从一个 Postman 请求中提取 headers 并将它们注入到其他请求中
Scooping headers off of one Postman request and injecting them into others
我的 Web 服务使用 JWT-based 授权不记名令牌身份验证:
- HTTP 客户端使用有效的 JSON 请求实体(包括用户名 + 密码信息)向
/v1/auth/signIn
发送有效的 POST
- 如果他们成功验证,该端点将作为 HTTP 响应发回身份验证持有者令牌 header(来自 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 请求包含在内 header 其 key/name 为
Authorization
并且其值为“Bearer <xyz>
”(其中 <xyz>
) 是在上面的登录调用中返回的 <big_huge_string>
。非常基本的标准 JWT 内容。
我正在尝试编写一个以“登录请求”开头的 Postman collection,成功登录并从服务中获取 JWT 令牌,然后在每个后续调用中添加适当的 HTTP 请求 header。关于我如何做的任何想法:
- 从我将从登录请求中返回的 HTTP 响应 header 中提取
<big_huge_string>
?然后
- 如何将
<big_huge_string>
保存为变量并将其作为 HTTP 请求 header 注入所有后续调用?
提前致谢!
更新
尝试了建议:
越来越近了,但是 console.log(...)
没有向 Postman 打印任何东西(或者至少我不知道去哪里寻找它)。我应该提到我 不是 使用 Postman 的 Chrome 应用程序版本,而是独立的 app/executable(版本 6.1.4):
有什么想法how/where 我可以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
是什么。有什么想法吗?!
一旦您拥有该令牌值,您就可以使用 {{token}}
语法在每个请求 header 中引用它。在 Auth header 中登录是比较难的部分。
您可以使用 pm.response.headers
获取 Headers 的列表,然后提取您需要的值。
这是作为列表返回的,因此也许使用 Lodash 之类的东西或将其转换为 object 可以帮助获得您需要的值。它类似于 pm.response.headers.toObject().Authorization
- 我还没有尝试过,所以我的语法可能有点错误。
您可以将 Headers 记录到 Postman 控制台并将其缩小到 - 只需将其包装在 Console.log()
语句中。
当你得到那个值时,它只是一个基本的 pm.globals.set('token, pm.response.headers.toObject().Authorization)
来全局保存这个。
我的 Web 服务使用 JWT-based 授权不记名令牌身份验证:
- HTTP 客户端使用有效的 JSON 请求实体(包括用户名 + 密码信息)向
/v1/auth/signIn
发送有效的 POST - 如果他们成功验证,该端点将作为 HTTP 响应发回身份验证持有者令牌 header(来自 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 请求包含在内 header 其 key/name 为
Authorization
并且其值为“Bearer <xyz>
”(其中<xyz>
) 是在上面的登录调用中返回的<big_huge_string>
。非常基本的标准 JWT 内容。
我正在尝试编写一个以“登录请求”开头的 Postman collection,成功登录并从服务中获取 JWT 令牌,然后在每个后续调用中添加适当的 HTTP 请求 header。关于我如何做的任何想法:
- 从我将从登录请求中返回的 HTTP 响应 header 中提取
<big_huge_string>
?然后 - 如何将
<big_huge_string>
保存为变量并将其作为 HTTP 请求 header 注入所有后续调用?
提前致谢!
更新
尝试了建议:
越来越近了,但是 console.log(...)
没有向 Postman 打印任何东西(或者至少我不知道去哪里寻找它)。我应该提到我 不是 使用 Postman 的 Chrome 应用程序版本,而是独立的 app/executable(版本 6.1.4):
有什么想法how/where 我可以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
是什么。有什么想法吗?!
一旦您拥有该令牌值,您就可以使用 {{token}}
语法在每个请求 header 中引用它。在 Auth header 中登录是比较难的部分。
您可以使用 pm.response.headers
获取 Headers 的列表,然后提取您需要的值。
这是作为列表返回的,因此也许使用 Lodash 之类的东西或将其转换为 object 可以帮助获得您需要的值。它类似于 pm.response.headers.toObject().Authorization
- 我还没有尝试过,所以我的语法可能有点错误。
您可以将 Headers 记录到 Postman 控制台并将其缩小到 - 只需将其包装在 Console.log()
语句中。
当你得到那个值时,它只是一个基本的 pm.globals.set('token, pm.response.headers.toObject().Authorization)
来全局保存这个。