2015-11-05 110 views
1

我正在使用PostMan来诊断我的Angular/NodeJS应用程序出现奇怪的400错误。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踢它。

数点:

  • 我用的智威汤逊在承载令牌来自于对用户进行认证,这是。

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

我的问题是:

  • 为什么会变成这样的要求是一个“错误的请求”时,它可以在其它端点?

  • 有没有办法在返回400之前捕获该请求并执行某些操作?

回答

2

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

我做了两个固定的那个问题显著的变化:

  1. 我被嵌入令牌有效载荷的完整的用户配置文件(长JSON)。由于性能方面的原因(尺寸小得多),以及在复杂有效载荷中出现问题导致问题时,我将它缩减为只是其用户标识。

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

我很高兴工作。我的下一步是从'授权'切换到'x-encoded-auth'或其他一些自定义名称。

+0

从这个cloudflare的任何文档? –

+0

@Simon_Weaver不是我所知道的.. –

+0

我想我有一些破坏身份验证的SSL问题。当我没有使用SSL访问时,它正在工作 - 所以希望用户配置文件的大小不是问题 –

0

@詹姆斯,我没有足够的声望发表评论你的回答,但我认为这对其他人在处理这个问题时有帮助,以表明你的建议是减少签名用户的复杂性/大小的确导致解决了我正在经历的类似问题。无论如何,这都在我的性能优化清单上 - 但我并没有想到在这种情况下它可能是错误的原因 - 所以你应该得到信用......谢谢!

对于读者 - 有这一些有用的链接,以便线程有关令牌最大尺寸:What is the maximum size of JWT token?

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

希望这证明从评论升级到答案!

+0

老兄,你的使用搬运工罗宾逊封面作为你的头像证明你的升级(IMO)! –

相关问题