Azure Web 应用程序 + Node.js + Azure AD = 错误 431

Dir*_*gür 9 azure node.js azure-active-directory azure-web-app-service azure-webapps

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

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

重现步骤:

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

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

进一步测试:

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

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

小智 11

这是一个已知问题,因为较新版本的节点存在限制,这些节点使用 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”添加到“配置”->“应用程序设置”就成功了 - 非常感谢! (2认同)