Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 400如果使用了授权承载令牌,则请求错误_Angularjs_Node.js_Express_Jwt - Fatal编程技术网

Angularjs 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

我正在使用PostMan对Angular/NodeJS应用程序中的一个奇怪的400错误进行故障排除

我正在尝试获取
https://example.com/login.html
请求有两个标题:

Authorization:Bearer-eyJ0eXAiOiJKV1QiLCJhbGc…=
Accept:text/html

这将返回一个
400错误请求
错误(服务器:cloudflare nginx)

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

  • 我在
    http://localhost:5000/login.html
    (无https因素?)-或-

  • 我从标题中删除
    授权:承载人

如果我查看我的NodeJS服务器日志,我甚至看不到请求通过。所以
/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}));