簡體   English   中英

Azure Web 應用程序 + Node.js + Z3A580F142203677F1F530BC308983Z13 = 錯誤

[英]Azure Web App + Node.js + Azure AD = Error 431

I created a Node.js based web application, running in an Azure Web App, that I wanted to put behind an Azure Active Directory authentication. 激活“App Service Authentication”后,登錄過程正常,但是返回我的應用程序后,它只返回 HTTP 431 “Request Header Fields Too Large”。

為了驗證它不是我的應用程序,我檢查了 Azure web 應用程序示例 Node.js 甚至在激活 AAD 時返回 431。

重現步驟:

  • 創建新的 Azure 資源 -> Web App
    • Select 任何基於節點的運行時堆棧,例如節點 12 LTS
    • Select 任何操作系統
    • 創建 web 應用程序並等待部署完成
  • 創建一個簡單的 web 應用程序
  • 在 web 應用程序設置中,go 為“身份驗證/授權”
    • 將“應用服務身份驗證”設置為“開啟”
    • Select Azure 活動目錄
    • Select Express 管理模式並在此過程中創建一個新的 Azure AD App
    • 作為“請求未通過身份驗證時采取的措施” select “使用 Azure AD 登錄”
    • 確認

結果:當使用瀏覽器打開 web 應用程序 URL 時,它將顯示登錄過程,在此過程之后一切似乎都正常工作,並且 AAD 返回到應用程序,但是此時它返回 Z293C9EA2416FF99875DC6F6F6

進一步測試:

  • 停用身份驗證,一切正常
  • 上傳 simple.html 文件而不是 Node 應用程序在啟用身份驗證的情況下工作正常
  • 用 restify 和 http 測試

有任何想法嗎? 我錯過了什么嗎?

這是一個已知問題,因為最近版本的節點使用 8KB 的硬上限作為標頭存在限制。 EasyAuth 向請求添加了一些非常大的標頭,這可能導致節點容器拒絕中間件容器發出的 400 請求。在此處閱讀更多相關信息:這可以通過將應用程序設置 WEBSITE_AUTH_DISABLE_IDENTITY_FLOW 設置為 true 來緩解。 這將刪除我們添加到請求中的最大標頭之一。 這個 header 一般只被 .NET Framework 和 Azure Functions 應用程序使用,所以這個設置應該是安全的。

如果問題仍然存在,可以嘗試使用 NodeJS 12 版本或增加 header 大小參數:node server.js --max-http-header-size 81000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM