400使用授权承载令牌时的错误请求

时间:2015-11-05 01:08:39

标签: angularjs node.js express jwt

我正在使用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令牌的来源。

  • 如果我使用Bearer令牌访问其他端点(例如/profile),则会使用用户配置文件正确响应解码令牌。

我的问题是:

  • 为什么此请求在其他端点上运行时会出现“错误请求”?

  • 有没有办法抓住这个并在请求返回400之前对其执行某些操作?

2 个答案:

答案 0 :(得分:4)

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

我做了两个重大修改来解决这个问题:

  1. 我在令牌有效负载中嵌入了完整的用户配置文件(long JSON)。由于性能原因(尺寸小得多)以及复杂有效负载中的某些内容导致问题,我将其减少到只是用户ID。

  2. 我在节点实现中从JWT-Simple切换到jsonwebtoken

  3. 我很高兴这很有效。我的下一步是从“授权”切换到“x-encoded-auth”或其他一些自定义名称。

答案 1 :(得分:0)

@pames,我没有足够的声誉对你的回答发表评论,但我认为对于那些正在努力解决这个问题的人来说,你的建议是降低签名用户的复杂性/规模确实会有所帮助导致解决了我遇到的类似问题。无论如何,这都在我的性能优化列表中 - 但我没有想到它可能是这种情况下的错误原因 - 所以你值得信任......谢谢!

对于读者来说,此SO主题中有一些关于令牌最大尺寸的有用链接:What is the maximum size of JWT token?

这是我用来检查生成的令牌的有效性的工具...... https://www.base64decode.org/

希望这有理由从评论升级到答案!