ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在测试基于以下 article 的基于 JWT 令牌的安全性的实现。我已成功收到来自测试服务器的令牌。我不知道如何让 Chrome POSTMAN REST 客户端程序在标头中发送令牌。

https://i.stack.imgur.com/MqjLs.png

我的问题如下:

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

2) 我需要对令牌进行 base 64 编码吗?我想我可以把令牌寄回去。

嗨,我在哪里可以在 POSTMAN 中看到我收到的 jwt 令牌?
@MLondei,这取决于接收服务器的配置方式。它可以作为 URL 返回(在 URL 字符串中查找),也可以在响应正文中返回(在响应的正文字段中查找)。这是我所知道的两个主要的。

M
Mick Cullen

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

授权:不记名 TOKEN_STRING

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


澄清一下,“Header”字段变为 Authorization,“Value”字段变为 Bearer[WHITESPACE]
你知道字段的哪一部分是加密的吗?看来数据就在最后一个“。”之后。分隔符给了我看起来像垃圾字符的东西。我假设这实际上是由令牌生成器加密的信息?
查看 jwt.io。您可以在其中粘贴 JWT 并查看其解码内容,这是查看发生情况的最佳方式。服务器机密字符串用于制作令牌的最后一部分。 JWT 仅签署有效负载不加密,即您可以解码第 1 部分 & 2 的字符串,但没有秘密就无法验证它。 self-issued.info/docs/draft-ietf-oauth-json-web-token.html
有人可以详细说明为什么我们需要将 Bearer 放在 JWT 之前吗?这是向服务器发出的某种信号,表明这是 JWT?
这只是惯例 - 您可以在此处找到所有详细信息:jwt.io/introduction
M
Mike Bovenlander

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

https://i.stack.imgur.com/OjNGc.png

更新:

https://i.stack.imgur.com/Ki615.png


如何使用最新的 JWT 令牌填充值?
P
Pablo Palacios

我在这个问题上添加了一个有趣的提示,可以帮助你们测试 JWT APIs。

它实际上非常简单。

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

Authorization: Bearer TOKEN_STRING

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

Authorization: Bearer {{jwt_token}}

在 Postman 上:然后在 postman 中创建一个全局变量为 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 的测试:testing examples

命令行:Newman

CI:integrating with Jenkins

不错的博文:master api test automation


有趣的是,我不熟悉 Test 选项卡和 Postman 编码的概念。你有推荐的资源来开始这个吗?
实际上,在自动化测试方面,Postman 非常有趣且非常强大。您可以配置邮递员,使其可以构建可以在测试中运行的随机数据全局变量或环境变量。并进行迭代运行并将任何响应作为端点单元测试进行测试。保存它们并在更改代码时发现错误。我没有使用命令行实用程序,但我知道您可以将其配置为在您的 ci 管道中运行。
您可以在此处阅读有关命令行的信息:getpostman.com/docs/newman_intro
E
Emeka Mbah

这是自动设置令牌的方法

在您的登录/身份验证请求中

https://i.stack.imgur.com/2LvKl.jpg

然后对于经过身份验证的页面

https://i.stack.imgur.com/FxTC9.jpg


V
Vucko

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

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

我设法最终通过使用来解决它:

Authorization: jwt <token>

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


我使用 Bearer <token>django 中获得 Authentication credentials were not provided。用 jwt <token> 解决。感谢您的解决方案
A
Adi

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

关键:授权

值:jwt {token}

就如此容易。


P
Pierre.Vriens

打开邮递员。转到“标题”字段。可以看到“关键值”空白。在密钥类型“授权”中。在值类型“承载(空间)your_access_token_value”中。

完毕!


j
jeffsama

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

Header 字段应放置 Authentication 而不是 Authorization

https://i.stack.imgur.com/OywJD.png

AAM 在他们的 documentation 中提到了它,

笔记! AAM 不使用标准授权标头,因为它被大多数 Apache 服务器跳过。 ...

希望它可以帮助某人!感谢其他答案也帮助了我很多!


c
coda

https://i.stack.imgur.com/4Xgps.png

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


Y
Yasitha Bandara

我按照 moplin 提到的方式做了。但在我的案例中,服务将 JWT 作为响应标头发送,作为“授权”键下的值。

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

我所做的是,在邮递员中创建一个全局变量

键->jwt 值->blahblah

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

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

在其他请求中选择标题选项卡并给出

key->授权值->{{jwt}}


R
RamanSM

不知何故,邮递员不适合我。我不得不使用一个名为 RESTED 的 chrome 扩展,它确实有效。


A
Abhi

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

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


对于 v7.19.0+,它也已经存在了一段时间,在 Authorization 选项卡中有一个 Bearer Token 帮助程序,在此处添加令牌值(硬编码或作为动态变量)将为要求。