使用 Azure 應用程式閘道時出現 HTTP 401.2 錯誤

使用 Azure 應用程式閘道時出現 HTTP 401.2 錯誤

我有一個 ASP.Net 網站託管在 Azure 中 Windows Server 2019 DataCenter 上的 IIS 10 中。該網站僅啟用了 Windows 身份驗證。

當我直接造訪該網站時(http://mysite-backend.example.com)系統會提示我輸入憑證,之後一切都會如預期進行。當我透過應用程式網關(配置了私有IP)造訪該網站時(https://mysite.example.com)系統會提示我輸入憑證,然後再次提示我請求其他資源(託管在同一網站上,對任何子資料夾沒有特殊規則)。系統會反覆提示我,直到我點擊“取消”,此時我在 Chrome 的網路日誌中看到資源請求的 401。

我遇到此問題的資源之一是favicon.png.如果我直接存取資源(https://mysite.example.com/favicon.png)一切正常,但是當我訪問網站頁面導致瀏覽器作為頁面資源的一部分發送對此資源的請求時,我看到了錯誤。這意味著該資源是可存取的;但有關“交易”中如何處理它的一些問題引起了問題。

我嘗試過使用不同的瀏覽器,包括全新安裝/來自不同的客戶端設備,以確保沒有快取導致問題。此外,我還Disable Cache檢查了 F12 網路設置,以確保我正在兩個站點之間進行完整的請求/公平的比較。

後端池只有 1 個節點。後端設定表示使用後端池的主機名稱而不是前端的主機名稱 - 因此從 Web 伺服器的角度來看,請求看起來很相似。

在網站伺服器的安全事件日誌中,我看到4625使用我的測試使用者名稱登入失敗(事件 id );確認請求使用正確的用戶名發送到後端伺服器(並且我非常小心地確保我始終輸入正確的密碼/已經這樣做了很多次以消除人為錯誤的可能性/已經嘗試了這兩種方法使用並覆蓋保存的密碼)。如果我嘗試太多次,我的測試帳戶就會被鎖定(即在 AD 中,屬性lockedout設定為true);之後所有請求都會得到 401 個回應(可以理解)。

我已檢查應用程式網關日誌以確認它沒有阻止任何內容。我還為此網站設定了自訂 WAF 規則,並將其設為detection only模式以確保它無法阻止請求;以防萬一某些內容被封鎖但未記錄。

我在後端伺服器上啟用了狀態 401 的失敗請求追蹤;顯示 401 來自:

-MODULE_SET_RESPONSE_ERROR_STATUS 

ModuleName: IIS Web Core 
Notification: AUTHENTICATE_REQUEST 
HttpStatus: 401 
HttpReason: Unauthorized 
HttpSubStatus: 2 
ErrorCode: Access is denied. (0x80070005) 
ConfigExceptionInfo

注意:當我在給定時間段內在同一設備上進行測試時,被阻止的資源(即收到 401 響應)通常是一致的;但如果我在不同的一天或在不同的設備上進行測試,我可能會看到不同的資源被阻止。我第一次在任何設備上進行測試(大多數情況下),我看到兩個POST對頁面的 xhr 請求/subfolder###/Search失敗,然後在該設備上進行了幾次測試後,其他資源似乎受到了污染。這感覺好像它們是主要原因 - 但隨後有些東西導致了會話問題。

我正在嘗試訪問後端站點的源代碼,以更好地了解這些搜尋端點在其中編碼的內容,以了解這是否可能導致問題。

同時,如果有人有任何想法,我們將不勝感激……提前致謝。


更新:直接呼叫搜尋端點也會產生 HTTP 200/有效回應:

$resp = Invoke-RestMethod -Method Post -Uri 'https://mySite.example.com/subfolder###/Search' -Form @{recordsToTake=25;recordsToSkip=0;sortColumn='CategorieName';sortDirection='Ascending'} -Credential $cred -StatusCodeVariable sc;"Status $sc";$resp

答案1

應用程式網關不支援 NTLM(「Windows 驗證」)(微軟文件)。

出於安全考慮,反向代理似乎通常不會實現 NTLM 支援(MS YARP NTML 討論)。

有一些替代的反向代理可以處理這個問題;例如nginx 加上(商業 nginx 產品)。

相關內容