【问题标题】:Azure Web App + Node.js + Azure AD = Error 431Azure Web 应用程序 + Node.js + Azure AD = 错误 431
【发布时间】:2020-07-18 10:36:53
【问题描述】:

我创建了一个基于 Node.js 的 Web 应用程序,在 Azure Web 应用程序中运行,我想将其置于 Azure Active Directory 身份验证之后。激活“应用服务身份验证”后,登录过程正常,但是返回我的应用后,它只返回一个 HTTP 431“请求标头字段太大”。

为了验证它不是我的应用程序,我检查了 Node.js 的 Azure Web 应用程序示例,甚至在激活 AAD 时返回 431。

重现步骤:

  • 创建新的 Azure 资源 -> Web 应用
    • 选择任何基于节点的运行时堆栈,例如节点 12 LTS
    • 选择任何操作系统
    • 创建 Web 应用并等待部署完成
  • 创建一个简单的 Web 应用程序
  • 在网络应用程序设置中,转到“身份验证/授权”
    • 将“应用服务身份验证”设置为“开启”
    • 选择 Azure Active Directory
    • 选择快速管理模式并在此过程中创建一个新的 Azure AD 应用
    • 作为“请求未通过身份验证时采取的操作”选择“使用 Azure AD 登录”
    • 确认

结果:使用浏览器打开 Web 应用程序 URL 时,它将显示登录过程,在此过程之后一切似乎都正常,AAD 返回到应用程序,但是此时它返回 HTTP 431。

进一步测试:

  • 停用身份验证,一切都恢复正常
  • 在启用身份验证的情况下,上传简单的 .html 文件而不是 Node 应用可以正常工作
  • 用 restify 和 http 测试

有什么想法吗?我错过了什么吗?

【问题讨论】:

    标签: node.js azure azure-active-directory azure-web-app-service azure-webapps


    【解决方案1】:

    这是一个已知问题,因为最近版本的节点使用 8KB 的硬上限作为标头存在限制。 EasyAuth 在请求中添加了一些非常大的标头,这可能导致节点容器拒绝中间件容器发出的 400 请求。在此处阅读有关它的更多信息: 这可以通过将应用程序设置 WEBSITE_AUTH_DISABLE_IDENTITY_FLOW 设置为 true 来缓解。这将删除我们添加到请求中的最大标头之一。此标头通常仅由 .NET Framework 和 Azure Functions 应用使用,因此此设置应该是安全的。

    如果问题依旧,可以尝试使用NodeJS 12版本或者增加header size参数:node server.js --max-http-header-size 81000

    【讨论】:

    • 嗨布莱恩,谢谢你的回答!这似乎是问题所在。我会试试你的设置并报告。你介意添加你暗示的链接吗?有趣的是,这个问题不会出现在西欧位置服务器上,只会出现在美国位置服务器上。我们是否使用不同(大小)的标题?
    • 将 "WEBSITE_AUTH_DISABLE_IDENTITY_FLOW" = "true" 添加到配置 -> 应用程序设置成功了 - 非常感谢!
    • 德克,很高兴这对您有所帮助。我忘记超链接的这个 URL 在这里:github.com/nodejs/node/issues/24693
    • 简单地切换到 NodeJS v14 似乎对我有用。我不确定这是否是由于 NodeJS v14 更改或 Azure App Service for NodeJS v14 中的设置
    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 2021-11-04
    • 2017-02-11
    • 1970-01-01
    • 2017-11-22
    • 2023-03-09
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多