我正在使用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之前对其执行某些操作?
答案 0 :(得分:4)
事实证明,这个问题与我实施JWT有关。出于某种原因,一个用户继续收到导致这400个错误的令牌,即使使用JWT.io验证令牌有效。
我做了两个重大修改来解决这个问题:
我在令牌有效负载中嵌入了完整的用户配置文件(long JSON)。由于性能原因(尺寸小得多)以及复杂有效负载中的某些内容导致问题,我将其减少到只是用户ID。
我在节点实现中从JWT-Simple切换到jsonwebtoken
。
我很高兴这很有效。我的下一步是从“授权”切换到“x-encoded-auth”或其他一些自定义名称。
答案 1 :(得分:0)
对于读者来说,此SO主题中有一些关于令牌最大尺寸的有用链接:What is the maximum size of JWT token?
这是我用来检查生成的令牌的有效性的工具...... https://www.base64decode.org/
希望这有理由从评论升级到答案!