Angularjs 400如果使用了授权承载令牌,则请求错误
我正在使用PostMan对Angular/NodeJS应用程序中的一个奇怪的400错误进行故障排除 我正在尝试获取Angularjs 400如果使用了授权承载令牌,则请求错误,angularjs,node.js,express,jwt,Angularjs,Node.js,Express,Jwt,我正在使用PostMan对Angular/NodeJS应用程序中的一个奇怪的400错误进行故障排除 我正在尝试获取https://example.com/login.html请求有两个标题: Authorization:Bearer-eyJ0eXAiOiJKV1QiLCJhbGc…=和Accept:text/html 这将返回一个400错误请求错误(服务器:cloudflare nginx) 如果出现以下情况,则此操作正常(返回200): 我在http://localhost:5000/log
https://example.com/login.html
请求有两个标题:
Authorization:Bearer-eyJ0eXAiOiJKV1QiLCJhbGc…=
和Accept:text/html
这将返回一个400错误请求
错误(服务器:cloudflare nginx)
如果出现以下情况,则此操作正常(返回200
):
- 我在
(无https因素?)-或-http://localhost:5000/login.html
- 我从标题中删除
授权:承载人
/login.html
甚至没有被点击,我假设是因为Express在我的app.use(logger('dev'))之前拒绝了它代码>拾取它
更新:我相信Cloudflare在请求到达Heroku之前已经用400回击了它
还有几点:
- 我使用JWT对用户进行身份验证,这就是承载令牌的来源
- 如果我使用承载令牌访问其他端点,例如
/profile
,它将通过解码令牌来正确响应用户配置文件
我的问题是:
- 当这个请求在其他端点上工作时,为什么它会是一个“坏请求”
- 有没有办法在请求返回为400之前捕获它并对其进行处理
事实证明,这个问题与我的JWT实现有关。出于某种原因,一个用户继续收到导致这400个错误的令牌,即使使用JWT.io验证该令牌有效
我做了两项重大更改,解决了这个问题:
我将完整的用户配置文件(长JSON)嵌入到令牌负载中。我将其缩减为用户ID,这既是出于性能原因(尺寸小得多),也是为了防止复杂负载中的某些内容导致问题
在我的节点实现中,我从JWT Simple切换到了jsonwebtoken
我只是很高兴它起作用了。我的下一步是从“授权”切换到“x-encoded-auth”或其他自定义名称。@James,我没有足够的声誉对你的答案发表评论,但我认为,如果您建议降低已签名用户的复杂性/大小,确实解决了我遇到的类似问题,这将有助于解决这个问题。无论如何,这都在我的性能优化列表中-但我没有想到这可能是这个场景中出现错误的原因-所以你值得表扬。。。谢谢
对于读者-此SO线程中有一些关于令牌最大大小的有用链接:
这是我用来检查生成的令牌有效性的工具
希望这证明了从评论升级到回答的合理性 cloudflare有关于这方面的文档吗?我想我遇到了一些SSL问题,破坏了身份验证。当我在没有SSL的情况下访问时,它就工作了——所以希望用户配置文件的大小不是问题所在problem@Simon_Weaver您是否尝试过切换到JWT Simple?本周末已经花了足够的时间来确定identityserver并刷新令牌和angular2。希望我现在能解决这个问题,它似乎与SSL有关。事实证明,一些同事以前见过这个问题。这是他们关于如何解决问题的建议:“Node express在请求有效负载大小上默认有某些限制,并且在您的情况下超过了某些用户的这些限制,从而导致了一个问题。您可以在Node express API中覆盖这些默认限制,如下所示:This.express.use(bodyParser.json({limit:'50mb'))
this.express.use(bodyParser.urlencoded({limit:'50mb',extended:true,parameterLimit:50000}));
“