IIS 7.5에서 Windows 인증 문제 (문제 없음)를 해결 하시겠습니까?


21

IIS와 통합 된 Windows 인증을 얻는 데 문제가있는 사람들에 대한 수천 건의 보고서가 있지만 모두 적용되지 않는 웹 페이지 나 이미 시도한 솔루션으로 연결되는 것으로 보입니다. 이전에 이와 같은 수십 개의 사이트를 배포 했으므로 서버 / 구성에 이상한 일이 발생했거나 너무 오래보고 있었지만 명백하지 않았습니다.

간단히 말해서 모든 것이 로컬 컴퓨터에서 완벽하게 작동하지만 프로덕션 서버에서는 완전히 동일한 구성을 갖습니다 .

로컬 머신에서 :

  • 컴퓨터에서 Windows 7 Ultimate, 서비스 팩 1, IIS 7.5가 실행되고 있습니다.
  • 이 사이트는 IIS와 VS Web Development Server를 모두 사용하여 성공적으로 테스트되었습니다.
  • IIS 사이트 구성에는 Windows 인증을 제외한 모든 인증 방법이 비활성화되어 있습니다.
  • 로컬 컴퓨터가 도메인에 없습니다.
  • 제공자 설정은 협상 및 NTLM (Negotiate : Kerberos 아님)입니다.
  • 확장 된 보호가 꺼져 있습니다.
  • 테스트를 거친 모든 브라우저 (IE, Firefox, Chrome)는 챌린지 프롬프트를 표시하며 내 (로컬) Windows 계정으로 로컬 호스트 도메인 에 로그인 할 수 있습니다.
  • 테스트 된 모든 브라우저는 불투명 한 로컬 IP 주소를 사용하여 작동하므로 브라우저 자체는 사이트가 "로컬"인지 "원격"인지를 신경 쓰지 않는 것 같습니다.
  • 웹 페이지에 현재 로그인 한 사용자를 표시하는 표시 줄을 추가했으며 예상 한 내용 (로그인 한 로컬 사용자)을 정확하게 표시합니다.

원격 머신에서 :

  • 서버가 Windows Server 2008 R2, IIS 7.5를 실행 중입니다.
  • 웹 페이지를로드하면 즉시 401.2 오류가 발생합니다. 인증 헤더가 잘못되어이 페이지를 볼 수있는 권한이 없습니다. 도전 프롬프트가 표시되지 않습니다.
  • IIS 사이트 구성에는 Windows 인증을 제외한 모든 인증 방법이 비활성화되어 있습니다.
  • 원격 시스템이 도메인에 없습니다.
  • 제공자 설정은 협상 및 NTLM (Negotiate : Kerberos 아님)입니다.
  • 확장 된 보호가 꺼져 있습니다.
  • 원격 컴퓨터 (원격 데스크톱 세션)에서 도메인이 로컬 호스트 인지 외부 IP 주소 인지에 관계없이 Internet Explorer에 동일한 오류가 나타납니다 .
  • 로컬 컴퓨터 에서 원격 웹 사이트 를 보려고 해도 오류는 여전히 401이지만 약간 다른 401입니다. 텍스트가 포함 된 하위 코드 없음 : 잘못된 자격 증명으로 인해 액세스가 거부되었습니다.
  • Windows 인증 IIS 역할 기능을 한다 설치되어 있어야합니다.
  • WindowsAuthentication과 모듈 한다 (서버 레벨에서) 추가.
  • Windows 인증을 끄고 기본 인증을 활성화하면 동일한 오류가 발생합니다.
  • Windows 인증을 끄고 익명 (명백하게)을 활성화하면 사이트 로드됩니다.
  • Microsoft 지원 : IIS의 HTTP 401 오류 문제 해결 에 대한 모든 문제 해결 단계를 이미 수행했습니다.
  • 이미 다른 Microsoft 지원 페이지에 표시된 해결 방법을 시도했습니다 (NTLM을 유일한 방법으로 강제로 설정 함).

마지막으로, 401.2 오류에 대해 FREB를 설정하려고 시도했지만 결과에 유용한 정보가없는 것 같습니다. 다음 경고 만 표시됩니다.

MODULE_SET_RESPONSE_ERROR_STATUS

ModuleName IIS 웹 코어
알림 2
HttpStatus 401
HttpReason 인증되지 않은
HttpSubStatus 2
오류 코드 2147942405
ConfigExceptionInfo
알림 AUTHENTICATE_REQUEST
오류 코드 액세스가 거부되었습니다. (0x80070005)

... 이것은 내가 이미 알고있는 것을 말해주는 것 같습니다 (자격 증명을 협상하는 대신 요청을 단순히 거부하는 것입니다).

추적은 = (및 기타 다양한 ASP.NET 후속 이벤트-[안타깝게도 여기서 흥미로운 오류나 경고는 없음]) NOTIFY_MODULE_START행 이 있기 때문에 WindowsAuthentication 모듈이 올바르게로드되었음을 나타냅니다 .ModuleNameWindowsAuthentication

아무도 내가 여기서 잃어버린 것을 말해 줄 수 있습니까?


빠른 업데이트:

IP, URL 및 기타 정보를 공개하므로 Wireshark 덤프 전체를 전송하는 것이 약간 불편하지만 로컬 호스트와 Fiddler의 원격 서버에서 HTTP 응답을 나란히 비교 한 결과 꽤 자기처럼 보입니다. -문제가 무엇인지 확인하십시오.

로컬 호스트 :

HTTP / 1.1 401 무단
캐시 제어 : 개인
내용 유형 : text / html; charset = utf-8
서버 : Microsoft-IIS / 7.5
WWW 인증 : 협상
WWW 인증 : NTLM
X-Powered-By : ASP.NET
날짜 : 2011 년 12 월 17 일 토요일 23:42:34 GMT
내용 길이 : 6399
프록시 지원 : 세션 기반 인증

먼:

HTTP / 1.1 401 무단
콘텐츠 유형 : text / html
서버 : Microsoft-IIS / 7.5
X-Powered-By : ASP.NET
날짜 : 2011 년 12 월 17 일 토요일 23:43:13 GMT
내용 길이 : 1293

캐시 제어와 같이 중요하지 않은 몇 가지 차이점 외에도 원격 서버가 WWW-Authenticate 헤더를 클라이언트로 다시 보내지 않는다는 것이 주요 차이점입니다 .

따라서 Windows 인증이 설치,로드 및 독점적으로 활성화 된 것으로 보이는 경우 IIS가 왜 WWW-Authenticate 헤더를 보내지 않습니까?


인증 시도의 일반 텍스트 wireshark를 캡처하는 마음 (먼저 비밀번호를 일회용으로 변경하십시오-우리는 인터넷에서 실제 비밀번호 해시를 원하지 않습니다)? 18 개월 정도 전에 Windows 패치에서 HTTP NTLM 협상이 일부 변경되었는데 (그런데 시스템이 완전히 패치 되었습니까?) 협상 대화.
Shane Madden

@ ShaneMadden : 노출 할 다양한 정보를 모두 고려하지만, 거의 같은 피들러 세션을 수행 할 수 있으며 적어도 IP를 익명화 할 수 있습니다. 사실 내가 이미 한 결과는 매우 자명해야합니다 (서버가 요청하지 않기 때문에 클라이언트가 자격 증명 프롬프트를 표시하지 않음).
Aaronaught


@Aaronaught 요리와 다른 사용자 이름을 어떻게 얻었습니까? 이 질문을 처음봤을 때 누군가 당신을 속이는 것이라고 생각했습니다.
Ward-Monica Monica 복원

@Ward : 누구나 자신의 사용자 이름을 편집 할 수 있습니다. 프로필의 일부입니다. 이것은 원래의 것이었고, 기술 이외의 사이트에서만 다른 사람들을 사용합니다.
Aaronaught

답변:


14

문제 해결됨. 나는 마침내 모듈 목록을 나란히 비교하기로 결정했으며 실제로 하나가 누락되었습니다. 두 가지 Windows 인증 모듈 이 있음이 밝혀졌습니다 .

모듈 목록

서버에는 관리 WindowsAuthentication모듈이 있지만 WindowsAuthenticationModule위에서 강조 표시된 기본 모듈은 없습니다 . 그렇게 구성한 이유는 누구나 추측 할 수 있지만 기본 모듈이로드되지 않으면 관리되는 모듈이 자동으로로드되고 자동으로 실패합니다.

따라서이 문제가 발생하는 이후의 독자라면 두 모듈모두로드되어 있는지 확인하십시오. IIS 중 하나 가 없으면 IIS 가 경고하지 않기 때문 입니다.


관리되는 WindowsAuthentication 모듈은 소리가 아닙니다. ASP.Net에서 Windows ID를 지원하며 항상 설치됩니다 (ASP.Net이 설치 될 때). 그러나 Windows 인증 기본 모듈은 서버 관리자에서 Windows 인증 구성 요소를 선택하면 설치되며 인증 GUI에 해당 인증 옵션을 표시하기 위해 필요한 것입니다.
TristanK

@TristanK :이 경우 해당 구성 요소가 틱되었지만 모듈이 설치되지 않았습니다. (그러나 옵션은 인증 GUI에서 볼 수있었습니다. 따라서 화면은 기본 모듈이 아닌 관리되는 모듈에 따라 달라집니다.)
Aaronaught

구성 파일 (아마도 ApplicationHost.config)을 변조 하여이 방법으로 얻을 수 있다고 생각합니다. 그러나 나는 그것이 어떻게 모두 빠져 나왔는지는 중요하지 않다고 생각한다. 그게했다.
Aaronaught

글쎄요. 문제가 발생하지 않으면 Windows Auth가 작동하지 않습니다. 이 경우 질문에 구성이 동일하지만 사실이 아닌 것으로 나타납니다. 그래서 그것은 작동하지 않았습니다. QED.
TristanK

1
이 누락 된 모듈 문제는 Windows Server 2012 R2에서 저를 물었습니다. 이 상태가 발생하면 아무런 징후가 없다는 것은 놀라운 일입니다. 어쨌든이 답변에 대단히 감사합니다. 말 그대로 머리를 찢어 버렸습니다!
Rob Davis

4

Windows 인증에서 실행되는 ASP.NET 사이트에서 로컬로 작업하는 개발자의 경우 반드시 이것이 문제를 해결하지는 않습니다. 루프백 검사를 비활성화하는 레지스트리 해킹이 발견되었습니다. 이 수정 :-

레지스트리 키-HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa

"DisableLoopbackCheck"라는 값이 1 인 DWORD를 만듭니다.

설정을 적용하려면 기기를 재부팅해야합니다


DisableLoopbackCheck를 1과 0으로 전환 할 수 있으며 변경 사항이 즉시 적용됩니다. 또한 "로그온 실패"메시지와 함께 이벤트 로그 보안 로그에 이벤트 ID 4625가 표시됩니다.
alastairtree

고맙습니다! IIS 인증 및 .Net 버전으로 이틀 동안 싸운다는 것은 사이트 마이그레이션을 테스트하는 동안 호스트 파일을 사용하여 더미 DNS 항목을 생성했기 때문입니다.
JohnLBevan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.