使用Postman在标头中发送JWT令牌


169

我正在根据以下文章测试基于JWT令牌的安全性的实现。我已成功从测试服务器收到令牌。我不知道如何让Chrome POSTMAN REST Client程序在标头中发送令牌。

邮递员屏幕截图

我的问题如下:

1)我使用正确的标题名称和/或POSTMAN接口吗?

2)我是否需要基于64位编码令牌?我以为我可以将令牌寄回去。


嗨,我在哪里可以在POSTMAN中看到我收到的jwt令牌?
Usr

1
@MLondei,这取决于接收服务器的配置方式。它可以作为URL返回(在URL字符串中查找),也可以在响应正文中返回(在响应的body字段中查找)。这些是我所知道的两个主要方面。
Diode Dan

Answers:


277

对于请求标头名称,只需使用授权。将Bearer放置在令牌之前。我只是尝试了一下,它对我有用。

授权:承载TOKEN_STRING

JWT的每个部分都是base64url编码的值。


61
澄清一下,“ Header”字段变成了Authorization,“ Value”字段变成了Bearer [WHITESPACE] <your-code-here>
Diode Dan

您知道该字段的哪一部分被加密吗?似乎该数据紧接在最后一个“。”之后。分隔符让我看起来像垃圾字符。我假设这实际上是由令牌生成器加密的信息?
二极管Dan

5
请查看jwt.io。在此部分中,您可以粘贴JWT并查看其解码内容,这是查看发生情况的最佳方法。服务器密钥字符串用于制作令牌的最后部分。JWT仅表示有效负载未加密,即您可以解码字符串的第1部分和第2部分,但是如果没有密码,则无法对其进行验证。self-issued.info/docs/draft-ietf-oauth-json-web-token.html
Mick Cullen

4
有人可以详细说明为什么我们需要将Bearer放在JWT之前吗?是否向服务器发出这是JWT的某种信号?
user137717

3
那只是惯例-您可以在这里找到所有详细信息: jwt.io/introduction
Michael Noyb

134

这是一张图片,如果有帮助的话:)

邮差

更新:

邮递员团队将“承载者令牌”添加到“授权标签”中: 更新的邮递员


40

我向这个问题添加了一些有趣的提示,可能会帮助您测试JWT Apis。

实际上,它非常简单。

登录时,在Api(登录端点)中,您将立即收到令牌,正如@ mick-cullen所说,您将必须在标头上使用JWT:

Authorization: Bearer TOKEN_STRING

现在,如果您想自动化或只是为了让您的生活更轻松,则可以将测试保存为全局标记,您可以在所有其他端点上调用该标记为:

Authorization: Bearer {{jwt_token}}

在邮递员上:然后在邮递员中将全局变量设为jwt_token = TOKEN_STRING。

在您的登录端点上:要使其有用,请在“测试”选项卡的开头添加:

var data = JSON.parse(responseBody);
postman.clearGlobalVariable("jwt_token");
postman.setGlobalVariable("jwt_token", data.jwt_token);

我猜想您的api在响应中将令牌作为json返回为:{“ jwt_token”:“ TOKEN_STRING”},可能会有一些变化。

在第一行上,将响应添加到数据变量。清理您的全局并分配值。

因此,现在您可以将令牌放在全局变量上,这使得在所有端点上易于使用Authorization:Bearer {{jwt_token}}的原因。

希望本技巧对您有所帮助。


编辑
一些东西要读

关于Postman上的测试测试示例

命令行:纽曼

CI:与Jenkins整合

尼斯博客文章:api自动化测试大师


有趣的是,我不熟悉Test制表符和邮递员编码的概念。您是否建议您开始使用此资源?
Diode Dan


实际上,对于自动化测试,Postman非常有趣并且功能强大。您可以配置邮递员,使其可以构建可以在测试中运行的随机数据全局变量或环境变量。并进行迭代运行并测试任何响应(作为端点单元测试)。保存它们并在更改代码时发现错误。我没有使用命令行实用程序,但我知道您可以将其配置为在ci管道中运行。
Pablo Palacios

您可以在此处阅读有关命令行的信息:getpostman.com/docs/newman_intro
Pablo Palacios

9

Flask在尝试相同的(Authorization: Bearer <token>)的前两个解决方案之后,我遇到了相同的问题:

{
    "description": "Unsupported authorization type",
    "error": "Invalid JWT header",
    "status_code": 401
}

我设法通过使用以下方法终于解决了:

Authorization: jwt <token>

认为这可能会节省遇到相同事物的人一些时间。


1
我得到Authentication credentials were not provideddjango使用Bearer <token>。用...解决jwt <token>。感谢您的解决方案
S_M


4

如果您想使用邮递员,正确的方法是使用标题

关键:授权

值:jwt {token}

就如此容易。


2

对于使用wordpress插件Advanced Access Manager打开JWT身份验证的人。

标头字段应放置验证而不是授权

在此处输入图片说明

AAM在他们的文档中提到了它,

注意!AAM 不使用标准的Authorization标头,因为大多数Apache服务器会跳过它。...


希望它能对某人有所帮助!谢谢你的其他答案也帮助了我很多!


2
  1. 打开邮递员。
  2. 转到“标题”字段。
  3. 在那里可以看到“键值”空白。
  4. 在密钥类型“授权”中。
  5. 在值类型“ Bearer(space)your_access_token_value”中。

做完了!


2

在此处输入图片说明

其他一切,即。参数,授权,正文,预请求脚本,测试为空,只需打开“ 标题”选项卡并添加即可,如图所示。GET请求也是如此。


0

邮递员以某种方式对我不起作用。我必须使用一个称为RESTED的Chrome扩展程序,该扩展程序确实有效。


0

我按照moplin所说的做。但是在我的情况下,服务在响应标头中发送JWT,作为键“ Authorization”下的值。

Authorization →Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbWFsIiwiZXhwIjoxNDk4OTIwOTEyfQ.dYEbf4x5TGr_kTtwywKPI2S-xYhsp5RIIBdOa_wl9soqaFkUUKfy73kaMAv_c-6cxTAqBwtskOfr-Gm3QI0gpQ

我所做的是,在邮递员中将Global变量设置为

键-> jwt
值->等等

在登录请求->“测试”选项卡中,添加

postman.clearGlobalVariable("jwt");
postman.setGlobalVariable("jwt", postman.getResponseHeader("Authorization"));

在其他请求中,选择“标题”标签,然后给

键->授权

值-> {{jwt}}


0

在Postman最新版本(7 ++)中,授权中可能没有Bearer字段,因此请转到Header选项卡

选择密钥作为授权并在值中写入JWT


对于v7.19.0 +,它已经存在了一段时间,选项卡中有一个Bearer Token助手,在Authorization此处添加令牌值(硬编码或作为动态变量)将为Authorization请求创建相同的标头。
丹尼·丹顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.