如果使用了授权承载令牌,则请求为400错误

Jam*_*tes 2 node.js express jwt angularjs

我正在使用PostMan来解决我的Angular / NodeJS应用中的奇数400错误。

我正在尝试 https://example.com/login.html,请求有两个标头:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...==Accept: text/html

这返回一个 400 Bad Request错误(服务器:cloudflare-nginx)

如果出现以下情况,则可以正常工作(返回200):

  • 我在本地环境中访问文件http://localhost:5000/login.html(没有https因素?)-或者-

  • Authorization: Bearer从标题中删除

如果我查看自己的NodeJS服务器日志,我什至看不到请求通过。因此/login.html,我认为这甚至没有受到打击,因为Express在我app.use(logger('dev'));提货之前就拒绝了它。

更新:我相信Cloudflare会在请求到达Heroku之前将其退还400。

还有几点:

  • 我正在使用JWT对用户进行身份验证,这就是Bearer令牌的来源。

  • 如果我访问其他端点(例如/profile使用Bearer令牌),它将通过解码令牌对该用户配置文件进行正确响应。

我的问题是:

  • 当此请求在其他端点上起作用时,为什么会是“错误请求”?

  • 有没有一种方法可以解决此问题,并在将其返回400之前对请求进行处理?

Jam*_*tes 6

事实证明,这个问题与我实施JWT有关。由于某种原因,即使使用JWT.io验证了令牌的有效性,一个用户仍然会收到导致这400个错误的令牌。

我进行了两项重大更改以解决此问题:

  1. 我将完整的用户配置文件(长JSON)嵌入令牌有效负载中。出于性能原因(尺寸小得多),以及万一复杂有效负载中的某些原因导致了问题,我将其简化为他们的用户ID。

  2. 我从JWT-Simple切换到jsonwebtoken了我的节点实现。

我很高兴能成功。我的下一步是从“授权”切换到“ x编码身份验证”或其他一些自定义名称。