특히 Kerberos 자격 증명 위임을 처리하는 경우 Windows 통합 인증 실패 시나리오 문제 해결이 어려울 수 있습니다. IIS(인터넷 정보 서비스)를 올바르게 구성하여 Windows 통합 인증을 사용하고 필요에 따라 자격 증명 위임을 사용하는 방법에 대한 자세한 검사 목록이 있지만 이 문서에서는 특히 다음 시나리오를 대상으로 합니다.
- 클라이언트 컴퓨터에서 대상 웹 사이트에 로그인할 수 있지만 인증 메커니즘으로 NTLM 또는 Kerberos를 사용하고 있는지 확실하지 않습니다.
- 대상 웹 사이트에 로그인할 수 있지만 사용자 이름과 암호 조합을 입력한 후에만 로그인하라는 메시지가 표시됩니다.
- 프런트 엔드 서버에서 대상 웹 사이트에 액세스할 수 있지만, 프런트 엔드 서버가 인증된 사용자의 자격 증명을 사용하여 백 엔드 HTTP 엔드포인트를 호출해야 하는 작업을 시작하면 실패합니다.
이 문서의 목적을 위해 다음 레이아웃을 고려합니다.
클라이언트 1 은 가상 사용자가 모든 연결 시도를 시작하는 도메인에 가입된 워크스테이션 또는 랩톱입니다.
Web-serv1 은 Windows 통합 인증을 사용하고 서비스 계정 의 ID인 ___domain\serviceaccount를 사용하여 실행하는 ASP.NET(.NET Framework) 웹 사이트를 호스팅하는 프런트 엔드 IIS 서버입니다.
Web-serv2 는 프런트 엔드 애플리케이션에 대한 API 엔드포인트를 노출하는 ASP.NET(.NET Framework) 사이트를 호스트하는 백 엔드 웹 서버입니다. 또한 Windows 통합 인증을 사용하고 ___domain\serviceapiaccount를 애플리케이션 풀 ID로 사용하는 애플리케이션 풀에서 실행되는 요청을 허용하도록 구성됩니다.
이러한 시나리오에 대한 데이터 수집을 용이하게 하고 Fiddler 또는 WireShark와 같은 외부 데이터 수집 도구에 의존하지 않도록 하려면(세 컴퓨터 간의 연결이 HTTPS를 사용할 수 있으므로 이러한 컴퓨터 간의 모든 교환이 암호화되기 때문에) IIS의 Windows 통합 인증 문제 해결을 위해 ASP.NET 자체 포함된 페이지의 두 개의 자체 포함 진단 페이지를 사용합니다.
페이지 문제 해결
두 페이지는 ASP.NET Web Forms로 코딩됩니다. 컴파일 또는 배포 없이 문제를 해결하려는 웹 애플리케이션의 루트에 복사할 수 있는 하나의 파일에서 페이지에 대한 코드와 태그를 번들로 묶기 위한 것입니다. 페이지는 다음과 같습니다.
WhoAmI.aspx - 이 페이지에서는 다음과 같은 인증 관련 정보를 덤프할 수 있습니다.
대상 사이트에 액세스하는 데 사용되는 인증 방법입니다. 이 메서드가 Windows 통합 인증에 대한 협상 공급자를 기반으로 하는 경우 페이지에 Kerberos 또는 NTLM이 사용자를 인증하는 데 사용되는지 여부가 표시됩니다.
사이트를 호스팅하는 애플리케이션 풀을 실행하는 계정의 ID입니다.
인증된 사용자의 가장 수준입니다. Kerberos가 인증에 사용되고 제약이 없는 자격 증명 위임이 허용되는 경우 가장 수준은 대리자로 표시됩니다. 그렇지 않은 경우 제한된 위임 또는 단순 가장의 경우 가장으로 표시됩니다.
인증된 사용자 및 사용자가 속한 그룹의 ID입니다.
페이지 코드를 실행하는 계정의 ID입니다(가장 설정에 따라 인증된 사용자 또는 애플리케이션 풀 사용자일 수 있습니다).
IIS 서버 변수에서 복구된 WhoAmI.aspx 페이지로 들어오는 요청에 대한 요청 헤더의 모든 값입니다.
ScrapperTest.aspx - 이 페이지는 WhoAmI.aspx 페이지에서 작동하도록 만들어 프런트 엔드 서버의 요청을 백 엔드 서버의 모든 URL로 보낼 수 있도록 합니다. 페이지에는 사용자가 다음을 수행할 수 있는 UI 인터페이스가 표시됩니다.
페이지에서 로드해야 하는 백 엔드 서버 리소스의 원하는 URL을 입력합니다.
ScrapperTest.aspx 페이지를 로드할 때 인증되는지 여부와 인증된 사용자( 인증된 사용자)를 확인합니다.
사용자가 실제로 인증되는 시나리오에서 확인란을 사용하면 URL 텍스트 상자에 표시된 백 엔드 리소스를 로드하려고 할 때 사용자의 자격 증명을 다시 사용할 수 있습니다.
배포 방법
두 페이지 모두 자체 포함되므로 필요한 것은 다음과 같습니다.
- GitHub 리포지토리에서 페이지를 다운로드합니다.
- IIS 내에서 실행되는 대상 웹 애플리케이션의 루트에 WhoAmI.aspx 페이지 또는 두 페이지를 복사합니다.
- 액세스하려는 페이지에 따라 /WhoAmI.aspx 또는 /ScrapperTest.aspx 추가하는 사이트의 URL을 요청합니다.
사용
첫 번째 사용 시나리오는 IIS에서 호스트되는 지정된 웹 사이트 또는 웹 애플리케이션에 액세스하는 데 사용되는 인증 방법을 결정하려고 시도합니다. 이 경우 이전에 사이트에 배포한 WhoAmI.aspx 페이지를 요청할 수 있습니다.
첫 번째 요청에서 페이지에 인증 정보가 표시됩니다. Windows 통합 인증에 대한 협상 공급자를 사용하는 경우 사용되는 인증 프로토콜인 Kerberos 또는 NTLM도 나열됩니다.
Negotiate가 Windows 통합 인증 공급자로 사용되는 시나리오의 후속 요청은 인증 유형 옆에 세션 기반 레이블만 표시합니다. 자세한 내용은 요청 기반 및 세션 기반 Kerberos 인증(또는 AuthPersistNonNTLM 매개 변수)을 참조하세요.
애플리케이션 풀 사용자, 인증된 사용자, 실행 사용자 세부 정보 및 들어오는 요청의 헤더와 같은 다른 모든 인증 정보는 각 요청에 표시됩니다.
WhoAmI.aspx 페이지에는 아래쪽에 작은 폼도 표시됩니다. 이 양식을 사용하면 서버에 요청을 발급 POST
하여 이러한 유형의 요청을 실행할 때 브라우저가 어떻게 작동하는지 테스트할 수 있습니다. 페이지가 60초 이상 유휴 상태이면 페이지를 브라우저에 다운로드하고 서버에서 인증하는 데 사용되는 TCP(Transmission Control Protocol) 연결이 비활성으로 인해 끊어집니다. 따라서 요청을 하면 POST
새 TCP 연결이 열리고 다시 인증해야 합니다. 요청에는 미묘한 POST
차이가 있습니다.
- 브라우저는 먼저 HTTP
POST
요청 헤더를 보냅니다. - 그런 다음, 페이지에 표시된 HTTP 양식의
POST
다양한 입력 필드에서 캡처된 정보를 포함하는 요청 본문을 발급합니다.
브라우저가 요청의 헤더를 POST
보낸 후 기다리지 않고 인증되지 않은 연결에서 본문을 직접 보내는 경우 다음 문제가 발생할 수 있습니다.
- 서버는 요청 헤더를
POST
수신하며 연결이 인증되지 않으므로(Windows 통합 인증 또는 다른 챌린지 기반 인증이 사용되었다고 가정) 적절한 인증 응답 HTTP 헤더(WWW-Authenticate
)를 사용하여 401 응답을 실행합니다. - 이 시간 동안 브라우저는 서버에서 401 응답을 받기 전에 요청 본문을 이미 보냈습니다
POST
. - 그런 다음 서버는 인증이 필요하다고 클라이언트에 이전에 표시한 연결에서 인증
POST
되지 않은 요청 본문을 받습니다. - 이로 인해 서버에서 기본 TCP 연결을 끊고 브라우저에 "웹 페이지를 사용할 수 없음" 메시지가 표시될 수 있습니다.
ScrapperTest.aspx 페이지는 프런트 엔드 서버에서 백 엔드 서버 엔드포인트로 자격 증명 시나리오 위임을 테스트하는 데 사용됩니다. 클라이언트 브라우저에서 페이지가 요청되면 다음을 허용하는 UI를 제공합니다.
- 프런트 엔드 서버가 연결해야 하는 백 엔드 엔드포인트 URL을 입력합니다.
- 프런트 엔드에서 사용자가 인증되었는지와 프런트 엔드 서버에 연결하는 데 사용되는 사용자 이름을 확인합니다.
- 인증된 사용자의 자격 증명을 백 엔드 서버에 요청과 함께 전달해야 하는지(가장 및 위임이 가능한 경우) 인증을 사용하여 ScrapperTest.aspx 페이지에 액세스하는 경우)를 결정합니다.
[스크랩 페이지] 단추를 선택하면 ScrapperTest.aspx 페이지의 코드에서 표시된 대상 URL에 대한 요청을 실행 GET
합니다. 자격 증명 사용 확인란을 선택하고 지정된 백 엔드 엔드포인트에 액세스하기 위해 인증이 필요한 경우 인증된 사용자의 자격 증명도 요청을 만드는 데 사용됩니다. 요청이 성공하면 수신된 응답의 원시 HTTP 출력으로 페이지의 텍스트 영역 컨트롤에 결과가 표시됩니다.
사용 시나리오는 백 엔드 서버에서 연결할 ASP.NET 애플리케이션 내에 ScrapperTest.aspx 페이지와 WhoAmI.aspx 페이지를 배치하는 것입니다. 따라서 ScrapperTest.aspx 페이지에서 복구된 HTTP 응답은 백 엔드에서 실행될 때 WhoAmI.aspx 페이지의 HTML 출력이 됩니다. 그런 다음 이 출력을 평가하여 백 엔드에서 요청이 인증된 방법과 사용된 계정을 이해할 수 있습니다.
자세한 정보
Kerberos를 사용하여 Windows 통합 인증 설정을 자세히 이해하려면 다음을 참조하세요.