
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 제공).