【问题标题】:400 Bad Request if Authorization Bearer token used如果使用了授权承载令牌,则为 400 错误请求
【发布时间】:2016-02-05 17:21:02
【问题描述】:

我正在使用 PostMan 解决我的 Angular / NodeJS 应用程序出现的奇怪的 400 错误。

我正在尝试 GET 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 之前捕捉到这一点并对其进行处理?

【问题讨论】:

    标签: angularjs node.js express jwt


    【解决方案1】:

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

    我做了两个重要的更改来解决这个问题:

    1. 我在令牌负载中嵌入了完整的用户配置文件(长 JSON)。出于性能原因(小得多)和以防万一复杂负载中的某些东西导致问题,我将其缩减为仅他们的用户 ID。

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

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

    【讨论】:

    • cloudflare 提供的关于此的任何文档?
    • 我认为我遇到了一些破坏身份验证的 SSL 问题。当我在没有 SSL 的情况下访问时,它正在工作 - 所以希望用户配置文件的大小不是问题
    • @Simon_Weaver 您是否尝试过切换到 JWT-Simple?
    • 这个周末已经花了足够的时间搞清楚身份服务器并刷新令牌和 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 }));"
    【解决方案2】:

    @James,我没有足够的声誉来对您的答案发表评论,但我认为这对其他在这个问题上苦苦挣扎的人会有所帮助,说明您的建议确实减少了签名用户的复杂性/大小导致解决了我遇到的类似问题。无论如何,这在我的性能优化列表中 - 但我没有想到这可能是在这种情况下导致错误的原因 - 所以你值得称赞......谢谢!

    对于读者 - 在这个 SO 线程中有一些关于令牌最大大小的有用链接:What is the maximum size of JWT token?

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

    希望这可以证明从评论到回答的升级是合理的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-24
      • 2020-03-05
      • 1970-01-01
      • 2018-11-03
      • 2013-07-21
      • 2016-12-08
      • 2023-01-14
      • 2018-08-17
      相关资源
      最近更新 更多