邮递员使用 JWT 进行授权调用时无法获得任何响应

Posted

技术标签:

【中文标题】邮递员使用 JWT 进行授权调用时无法获得任何响应【英文标题】:Postman could not get any response making authorized call with a JWT 【发布时间】:2019-04-08 04:05:29 【问题描述】:

我在 .NET Core 中设置了一个简单的 API,使用由 Identity Server 4 编排的 JWT 来保护它。当我访问一个属性为 [Authorize] 的端点时,我得到了预期的响应 (401未经授权)。注释掉后,它返回实际数据,正如所希望的那样。

现在,当添加带有键 Authorization 和值 Bearer XXX 的标头(其中 XXX 是我获得的令牌)时,我会立即收到一条错误消息,说明

得不到任何回应

接下来是关于做什么的四个建议。我关闭了 SSL 证书并且不需要代理,因为一切都在基本设置中本地运行。超时不相关(设置为 0 并立即发生错误)。

它给我留下了 *backend 的抽象选项无法正常工作。我没有做任何特别的事情,只是按照 IS 网站上提供的指南进行操作。由于错误的直接性,我的印象是我在 Postman 中做了一些不那么出色的事情。此外,IS 的控制台没有说明任何错误,这进一步加强了我对与它无关的问题的怀疑。

我尝试在 URL 下面的选项卡上设置不同的授权。每次调用的结果相同。我检查了 hosts 文件,它看起来像这样

127.0.0.1 本地主机

按照this article 的建议,我已确保在粘贴标记的末尾没有换行符。我尝试将键 Content-type 设置为 application/json et.al。喜欢建议的here。我已经检查过我没有像here 所示的冲突环境变量。等等 - 基本上是我找到的任何信息、文章和提示。

在这个阶段,我对如何解决问题没有任何想法,并且我对谷歌搜索的新关键字感到厌烦。

可能是什么原因,可以做些什么,至少,我可以从哪里获得更多关于如何继续的灵感?

【问题讨论】:

您确定网站在https 下运行吗?您是否尝试过在 Postman 中使用 http 对于where XXX is my obtained token,你是如何获得这个令牌的?要检查它是否与邮递员配置有关,您可以使用简单的html页面进行测试并将ajax请求发送到该端点,您是否收到任何错误?另外,您可以使用 Fiddler 进行测试以发送请求。 @TaoZhou 原来,复制的令牌将换行符合并到字符串中并转换为空格。这让邮递员窒息。是你的你是如何获得令牌的让我思考的。您的意思可能是代码,但它让我想到了复制它的实际行为。当然,还有粘贴。请重新发表您的评论作为回复,以便我接受。 【参考方案1】:

为了缩小这个问题,检查令牌是否验证以及令牌是否被正确复制,比较从请求发送的令牌和原始令牌。

【讨论】:

【参考方案2】:

我最近遇到了这个问题,并通过在 Authorization 选项卡而不是 Headers 选项卡中执行请求授权来修复它。

点击授权选项卡,将类型更改为Bearer,然后粘贴您的令牌。


如果可能,您可能还希望自动捕获访问令牌作为环境变量;这可以防止复制/粘贴问题,并允许您在令牌过期后轻松刷新。

为此,您需要创建并保存一个检索访问令牌的 Postman 请求,然后使用该请求中的“测试”选项卡来解析响应并将访问令牌设置为变量。

以下是一些示例测试代码,可能需要根据您的特定端点进行修改:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("accessToken", jsonData.accessToken);

发出登录请求后,应填充accessToken 环境变量,您可以使用accessToken 作为您的授权值,而不是原始令牌字符串。

【讨论】:

以上是关于邮递员使用 JWT 进行授权调用时无法获得任何响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jwt 的基于令牌的身份验证无法授权

laravel 8 -> 使用 jwt 和邮递员授权

邮递员中的“无法得到任何回应”

如何记录并响应来自 Ktor 中 JWT 授权失败的错误消息?

即使响应正常,邮递员仍显示“无法得到任何响应”

浏览器没有响应,但在邮递员中得到 401