Azure 애플리케이션 게이트웨이를 사용할 때 HTTP 401.2 오류

Azure 애플리케이션 게이트웨이를 사용할 때 HTTP 401.2 오류

Azure의 Windows Server 2019 DataCenter의 IIS 10에서 호스팅되는 ASP.Net 사이트가 있습니다. 이 사이트에는 Windows 인증만 활성화되어 있습니다.

사이트에 직접 접속하면 (http://mysite-backend.example.com) 자격 증명을 묻는 메시지가 나타나면 모든 것이 예상대로 작동합니다. App Gateway(개인 IP로 구성)를 통해 사이트에 접속할 때(https://mysite.example.com) 자격 증명을 입력하라는 메시지가 표시된 후 추가 리소스를 요청하라는 메시지가 다시 표시됩니다(하위 폴더에 대한 특별한 규칙 없이 동일한 사이트에서 호스팅됨). 취소를 클릭하면 Chrome의 네트워크 로그에 리소스 요청에 대한 401이 표시될 때까지 반복적으로 메시지가 표시됩니다.

이 문제를 다루는 리소스 중 하나는 에 대한 GET 요청입니다 favicon.png. 리소스에 직접 액세스하는 경우(https://mysite.example.com/favicon.png) 모두 작동하지만, 이 리소스에 대한 요청이 브라우저에서 페이지 리소스의 일부로 전송되도록 하는 사이트 페이지에 액세스하면 오류가 표시됩니다. 이는 리소스에 액세스할 수 있음을 의미합니다. 하지만 "트랜잭션" 내에서 처리되는 방식에 문제가 있습니다.

문제를 일으키는 캐시가 없는지 확인하기 위해 새로 설치하거나 다른 클라이언트 장치를 사용하는 등 다양한 브라우저를 사용해 보았습니다. 또한 Disable Cache두 사이트 간의 완전한 요청/공정한 비교를 수행하고 있는지 확인하기 위해 F12 네트워크 설정을 확인했습니다.

백엔드 풀에는 노드가 1개만 있습니다. 백엔드 설정에 따르면 프런트엔드 대신 백엔드 풀의 호스트 이름을 사용합니다. 따라서 웹 서버 관점에서 보면 요청이 비슷하게 보입니다.

웹 서버의 보안 이벤트 로그에 4625내 테스트 사용자 이름으로 실패한 로그온(이벤트 ID)이 표시됩니다. 요청이 올바른 사용자 이름을 사용하여 백엔드 서버로 전송되고 있는지 확인합니다. (저는 올바른 비밀번호를 일관되게 입력하고 있는지 확인하기 위해 매우 주의를 기울였습니다./사람의 실수 가능성을 없애기 위해 여러 번 시도했습니다./둘 다 시도했습니다. 저장된 비밀번호를 사용하고 덮어쓰기도 합니다). 너무 많이 시도하면 테스트 계정이 잠깁니다(예: AD에서는 lockedout속성이 로 설정됨 true). 그 후 모든 요청은 401 응답을 받습니다(이해할 수 있음).

App Gateway 로그를 확인하여 아무것도 차단하지 않는지 확인했습니다. 또한 이 사이트에 대한 사용자 지정 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 인증")은 App Gateway(MS 문서).

일반적으로 역방향 프록시는 보안 문제로 인해 NTLM 지원을 구현하지 않는 것 같습니다(MS YARP NTML 토론).

이를 처리할 수 있는 몇 가지 대체 역방향 프록시가 있습니다. 예를 들어nginx 플러스(상업용 nginx 제공).

관련 정보