통합 Windows 인증을 사용하여 로그인 프롬프트 받기


108

Windows 2003 서버의 IIS 7에서 실행되는 .NET 3.5 응용 프로그램이 있으며 로그인을 요구하는 메시지가 계속 표시되면서 통합 Windows 인증이 제대로 작동하지 않습니다. 다른 모든 보안 유형을 비활성화하고 내 응용 프로그램 web.config 파일 인증 / 권한이 다음과 같이 설정되어있는 IIS에서 Windows 인증을 활성화하도록 설정했습니다.

<system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="3.5" />
    <authenticationmode="Windows"/>
    <authorization>
    <deny users = "?" />
    </authorization>
</system.web>

이 설정을 사용하면 Windows 사용자의이면 검증이 액세스를 허용하고 익명 사용자를 거부 할 것으로 예상합니다. 그러나 사이트에 액세스하려고하면 Windows 로그인 팝업이 표시됩니다.

며칠 동안이 문제를 해결해 왔지만 문제를 파악할 수 없습니다. 비슷한 문제가있는 게시물을 기반으로 URL에 마침표가 없음을 확인하고 IE 설정이 Windows 통합 인증 사용으로 설정되어 있는지 다시 확인하고 인트라넷 사이트에 URL을 추가했지만 여전히 팝업이 나타납니다.

문제를 더 해결하기 위해 IIS에서 익명 인증을 활성화하고 web.config 파일을 수정하여 바로 들어갈 수 있도록 한 다음 Response.Write (System.Security.Principal.WindowsIdentifity.getcurrent (). user.name.toString ()를 추가했습니다. )을 클릭하여 인증에 사용중인 사용자를 확인합니다. 내가 얻은 결과는 IIS APPPOOL \ myapp이며 이는 분명히 내 응용 프로그램의 IIS 응용 프로그램 풀입니다.

나는 여전히 Windows 인증 만 사용하고 있지만 팝업이 표시되지 않고 실제 Windows 사용자에 대해 Windows 인증이 수행되도록 누구든지 제공 할 수있는 모든 도움에 감사드립니다.

감사.


추가 문제 해결 후 추가 참고 사항 :

로그인이 실패하고 Windows 로그인 프롬프트가 다시 표시 될 때 "SERVERNAME"\ "USERNAME"로 로그인을 시도한 사용자 이름이 표시되어 서버와 서버에 대해 사용자의 유효성을 검사하려한다고 믿게되었습니다. 도메인. 이를 확인하기 위해 네트워크 도메인 사용자와 동일한 사용자 이름과 비밀번호로 앱 서버에 직접 로컬 사용자 계정을 만들고 다시 로그인을 시도했습니다. 그 결과 다시 로그인 프롬프트를 받았지만 이번에 사용자 이름과 비밀번호를 입력하면 성공적으로 로그인 할 수있었습니다. 네트워크 사용자와 앱 서버는 동일한 도메인에 있으므로 IIS 인증이 도메인 계정이 아닌 로컬 앱 서버 계정을 가리키는 이유를 확실하지 않습니다. 이 시점에서 이것이 IIS 질문이라는 것을 알고 있으므로 forums.iis에 게시합니다.


4
인증과 모드 사이에는 다음과 같이 공백이 있어야 <authentication mode="Windows" />합니다. 질문에 오타 였으면 좋겠습니다.
Sean Hanley 2011

3
서버 2003에서 iis 7을 실행하고 있는데 이것이 불가능하다고 확신합니까?
Anicho

답변:


86

작업중인 Windows 2008 서버가 있으므로 내 대답은 Windows 2003 서버의 OP와 완전히 동일하지 않습니다.

내가 한 일은 다음과 같습니다 (나중에 찾을 수 있도록 여기에 기록).

이 같은 문제가 발생했습니다.

로그인 프롬프트

Web.config 파일에는 다음 섹션이 있습니다.

<system.web>
    <authentication mode="Windows" />
    <authorization>
        <allow users="*" />
        <deny users="?" />
    </authorization>
</system.web>

IIS에서는이 모든 것이 인증 아이콘 아래에서 해결되는 것 같습니다 .

  1. 권한 편집 : ASP.NET 계정에 권한이 있는지 확인하십시오. 내 것은 원래 추가되지 않았습니다.

ASP.NET 권한

이제 인증 기능으로 이동하십시오 .

인증 기능

다음을 사용하여 익명 인증 을 활성화 합니다 IUSR.

익명 인증

Windows 인증을 활성화 한 다음 마우스 오른쪽 버튼을 클릭하여 공급자 를 설정합니다 .

NTLM이 가장 먼저 필요합니다!

Windows 인증

다음으로 고급 설정 ... 에서 확장 된 보호수락 이고 커널 모드 인증 사용선택 되었는지 확인합니다 .

고급 설정

이 작업을 수행 한 후 웹 응용 프로그램으로 돌아가서 찾아보기 링크를 클릭하고 자격 증명을 다시 제공 할 필요없이 로그인했습니다.

많은 분들께 도움이 되셨기를 바라며, 나중에도 도움이되기를 바랍니다.


1
고마워, 수 제이. 나는 이러한 기술의 대부분이 그들이 말하는 것을 보여주는 사진이 부족하다는 것을 알았으므로 내가 사용한 모든 단계를 보여주고 싶었습니다. 이 경우 없는 사람을 위해 일을, 적어도 그들은 모두 그들이했다 단계, 어떤 다른 옵션 시도를 볼 수 있습니다.
jp2code

1
이 때문에 내가 미쳐 왔던 놀라운 일이다. 그리고 사진은 그것을 훨씬 쉽게 만들었습니다. 감사!!
KratosMafia

1
나에게도 효과가 있었지만 마지막에 Windows 2008 r2 인스턴스를 다시 시작해야했습니다. 언급하는 것이 중요하다고 생각합니다.
Aleksei Mialkin

6
는 IIS 8.5를 실행하는 Windows Server 2012에서 작동하지 않습니다.
Minh Nguyen

3
이것은 단지 익명 인증을 가능하게하여 Windows 인증이 무시되도록 허용하지 않습니까? 진짜 질문입니다. 위의 내용이 나에게 어떻게 보이는지입니다.
Paul Hodgson

49

다른 사람들의 이익을 위해서. 오류가 a 401.1 Unauthorized이고 오류 코드가 일치하는 0xc000006d경우 실제로 로컬 컴퓨터 이름과 일치하지 않는 FQDN 또는 사용자 지정 호스트 헤더에 대한 요청을 차단하는 보안 "기능"을 사용하는 것입니다.

이 지원 문서에 따라 문제를 해결하십시오.

https://webconnection.west-wind.com/docs/_4gi0ql5jb.htm (원본, 현재 사용되지 않음 : http://support.microsoft.com/kb/896861 )

지원 문서에서 분실되지 않도록하기 위해 :

해결 방법은이 정책을 명시 적으로 비활성화하는 레지스트리 해킹입니다.

이 구성을 수동으로 수행하려면 서버의 레지스트리에서이 키를 찾으십시오.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

새 키를 편집하거나 추가합니다.

DisableLoopbackCheck (DWORD)

그런 다음 값을 1로 보내 루프백 검사를 비활성화하거나 (로컬 인증 작동) 0 (로컬 인증이 허용되지 않음)으로 보냅니다.

또는 더 쉽게 Powershell을 사용할 수 있습니다.

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -Value "1" -PropertyType dword

Windows 10의 최신 빌드 (1803 이상?)에서도 로컬 인증을 위해이 구성 설정이 필요한 것 같습니다.

여기에있는 다른 모든 사람들의 의견이 나를 도와주지 않았기 때문에 이것은 나를 잠시 걸렸다. 이 기사를 찾았고 수정했습니다!


3
당신은 내 f * g 영웅입니다! 나는 이것에 도달하기 위해 너무 많은 "해결책"을 겪었다. 감사합니다!
dewd

1
이런 젠장! 이틀 동안이 일을 작동 시키려고 노력했는데 마침내 당신이 나에게 답을 주셨습니다! 감사!
BernieSF

1
여러 답변을 살펴보고 구성이 내 것과 동일하다는 것을 확인한 후 이것이 답이었습니다!
Sietse 2017

1
당신은 전설! 이것은 나를 위해 일했습니다. 나는 이것을 찾는 데 오랜 시간을 보냈다.
Andy Vennells

2
@PTD 새로운 기사로 업데이트되고 후손에 대한 요약이 추가되어 손실되지 않습니다. MS 지원 영구 링크에 너무 많이!
kamranicus

26

웹 사이트의 특정 부분 만 보호하고 싶은 비슷한 문제가있었습니다. IE를 제외한 모든 것이 잘 작동했습니다. 익명 및 Windows 인증을 모두 활성화했습니다. 익명의 경우 ID는 응용 프로그램 풀 ID로 설정됩니다. 문제는 Windows 인증에있었습니다. 주위를 파헤친 후 나는 fiddler를 시작하고 Kerberos를 공급자로 사용하고 있음을 발견했습니다 (실제로 기본적으로 협상으로 설정되어 있음). NTLM으로 전환하고 수정했습니다. HTH

다 우디


1
저를 위해 끝났습니다, 감사합니다! 로컬로 액세스 할 때 Windows 사용자를 선택할 수 있었지만 자격 증명 요청은 도메인의 다른 컴퓨터에서 팝업됩니다.
JSancho 2013

1
@Daudi 인증 방법별로 ID를 어떻게 설정합니까?
Rob Bell

18

웹 보안에 [도메인 사용자] 권한을 추가하십시오.

  • IIS에서 사이트 폴더 아래의 사이트를 마우스 오른쪽 버튼으로 클릭하십시오.
  • 권한 편집 ...을 클릭합니다.
  • 보안 탭을 선택하십시오.
  • 그룹 또는 사용자 이름 섹션에서 편집 ... 버튼을 클릭합니다.
  • 권한 팝업의 그룹 또는 사용자 이름에서 추가 ...를 클릭합니다.
  • 개체 이름에 [도메인 사용자]를 입력하여 텍스트 영역을 선택하고 확인을 클릭하여 변경 사항을 적용합니다.
  • 확인을 클릭하여 권한 팝업을 닫습니다.
  • 확인을 클릭하여 속성 팝업을 닫고 새 설정을 적용하십시오.

10
이를 수행하는 방법에 대한 단계가 도움이 될 것입니다.
Drew Chapin 2013 년

2
+1. 당신은 나의 하루와 나의 정신을 구했습니다. 매우 감사!
stakx - 더 이상 기여하지 않습니다

11

모든 것을 변경하여 서버에 실수를하지 마십시오. 2008 R2에서 Windows 인증을 사용할 때 Windows에 로그온하라는 메시지가 표시되는 경우 각 응용 프로그램으로 Providers이동하여 위로 이동 NTLM하십시오. 때 Negotiate목록의 첫 번째는, Windows 인증은 2008 R2의 특정 응용 프로그램에 대한 작업 속성을 중지 할 수 있습니다 당신은 결코 일보다는 사용자 이름과 암호를 입력하라는 메시지가 표시 될 수 있습니다. 이는 애플리케이션을 업데이트 할 때 발생합니다. NTLM목록의 첫 번째 이상인지 확인 하면이 문제를 다시는 볼 수 없습니다.


1
이것은 나를 위해 그것을 고쳤습니다.
Bigwave '1311.21

9
물론 NTLM이 목록에 먼저 포함되는 것을 원하지 않는 한 ...이 작업을 수행하는 데 따른 결과가 있으므로 이러한 변경을 수행하는 모든 사람은 NTLM과 협상의 차이점을 이해해야합니다 (가장 기본적인 수준에서 협상 첫 번째 Kerberos 인증 시도 및 실패 실패하면 NTLM으로 돌아갑니다). Kerberos를 원하고 많은 사람들이 원하는 경우 이것은 좋은 해결책이 아닙니다. 여기에 몇 가지 세부 정보가 있습니다 : msdn.microsoft.com/en-us/library/aa480475.aspx
TCC

8

URL에 도메인 이름에 점이있는 경우 IE는이를 로컬이 아닌 인터넷 주소로 취급합니다. 최소한 두 가지 옵션이 있습니다.

  1. server.domain을 대체하기 위해 URL에서 사용할 별칭을 가져옵니다. 예 : myapp.
  2. 컴퓨터에서 아래 단계를 따르십시오.

사이트로 이동하여 로그인 대화 상자를 취소하십시오. 이렇게하세요 :

여기에 이미지 설명 입력

IE의 설정에서 :

여기에 이미지 설명 입력

여기에 이미지 설명 입력

여기에 이미지 설명 입력


1
우리는 Windows Server 2012를 사용하고 있으며 이것이 우리를 위해 일한 유일한 솔루션입니다. 감사합니다!
ashilon

5

WindowsIdentity.GetCurrent맞습니다 : APPPOOL 사용자를 가져와야합니다. 이는 코드를 실행하는 ASP.NET 프로세스가 현재 ID이기 때문입니다. 사이트의 ID를 조회하는 사용자를 반환하려면 web.config에 다음 줄을 추가해야합니다.

<identity impersonate="true" />

이로 인해 프로세스는 페이지를 요청하는 사용자의 ID를 가정합니다. 모든 작업이 대신 수행되므로 네트워크의 폴더를 읽거나 데이터베이스 리소스 등에 액세스하려는 시도는 현재 사용자에게 해당 항목에 대한 권한이 필요함을 의미합니다. 여기에서 가장에 대한 자세한 내용을 읽을 수 있습니다 . 웹 / 데이터베이스 서버 토폴로지가 설정된 방식에 따라 가장이 켜져있는 경우 위임 문제가 발생할 수 있습니다.

그러나 원래 문제는 신원을 확인할 수 없으며 로그인 팝업이 표시된다는 것입니다. <deny>IIS에서 익명 인증을 비활성화 한 경우 에는 차단이 필요하지 않습니다 . 우리는 그것을 포함하지 않습니다 (특수 <location>블록 등을 제외하고 ) 그래서 나는 당신이 그것을 제거하고 다시 시도 할 수 있다고 말할 것입니다. 그래도 다른 모든 것은 옳게 들립니다.

IIS에서 응용 프로그램 풀을 실행하는 사용자를 지정하지 않았습니다. 사용자 지정 계정입니까 아니면 기본 계정입니까? 사용자 정의 인 경우 웹 서버의 도메인 계정입니까 아니면 로컬 계정입니까? 사용자 지정 계정에는 SPN 등록과 같은 몇 가지 단계가 더 필요할 수 있습니다. 또한 AD에서 들어오는 사용자의 계정을 해결하기위한 권한이없는 사용자 지정 계정에 문제가있을 수 있습니다.

IIS 로그를 확인하여 어떤 응답이 반환되는지 확인할 수도 있습니다. 401 일 가능성이 높지만 그 뒤에 401.2와 같은 하위 번호가 있어야합니다. 이 하위 번호는 때때로 근본 문제를 결정하는 데 도움이 될 수 있습니다. 이 KB 문서 에는 다섯 가지가 나열되어 있습니다.


SPN의 요구 사항을 언급하면 ​​+1. 사실, 로그인 팝업에서 직면 한 대부분의 문제는 Kerberos 환경에서 누락 된 SPN 때문이었습니다.
SBS

5

이것은 나를 위해 그것을 고쳤습니다.

내 서버 및 클라이언트 PC는 Windows 7이며 동일한 도메인에 있습니다.

  1. iis7.5에서 인트라넷에 대한 Windows 인증을 활성화합니다 (다른 모든 인증을 비활성화합니다. 또한 web.config 파일에서 Windows 인증을 언급 할 필요가 없습니다.

  2. 그런 다음 클라이언트 PC로 이동합니다. IE8 또는 9- 도구-인터넷 옵션-보안-로컬 인트라넷-사이트-고급-사이트 추가 ( "require server verfi ..."ticketmark..no need

  3. IE8 또는 9- 도구-인터넷 옵션-보안-로컬 인트라넷-사용자 지정 수준-사용자 인증-로그온-현재 사용자 이름 및 암호로 자동 로그온 선택

  4. 이 설정을 저장합니다. 완료되었습니다. 더 이상 사용자 이름과 비밀번호를 입력하라는 메시지가 표시되지 않습니다.

  5. 클라이언트 PC가 도메인의 일부이므로이 설정에 대한 GPO가 있어야합니다. 그렇지 않으면 사용자가 다음에 Windows에 로그인 할 때이 설정이 다시 되돌아갑니다.


2
1) 실제로 가장 및 Windows 인증을 활성화했으며 모든 것이 정상이었습니다. 나에게 중요한 것은 2) 로컬 인트라넷 영역에 원격 사이트 주소를 추가하는 곳이었습니다.
SideFX 2013 년

4

브라우저와 관련 될 수 있습니다. IE를 사용하는 경우 고급 설정으로 이동하여 "Windows 통합 인증 사용"확인란이 선택되어 있는지 확인할 수 있습니다.


4

제 경우에는 인증 설정이 제대로 설정되지 않았습니다.

나는해야했다

  1. IIS 관리자에서 .NET 권한 부여 규칙 을 엽니 다.

    IIS 관리자에서 .NET 권한 부여 규칙을 엽니 다.
  2. 제거 거부 규칙

    거부 규칙 제거

3

인트라넷에서는 여기에 표시된대로 보안 설정을 조정하여 클라이언트 측에서 문제를 해결했습니다. 오른쪽의 확인란 중 하나가 우리에게 효과적이었습니다.

IE 인터넷 옵션


2

방금 ASP.Net 응용 프로그램에서 비슷한 문제를 해결했습니다.

증상 : 로컬 사용자를 사용하여 내 앱에 로그인 할 수 있지만, 시스템이 도메인에 올바르게 가입 된 경우에도 도메인 사용자가 아닙니다 (추가 참고 사항에서 언급 한대로). 보안 이벤트 뷰어에 ID = 4625 "도메인 sid가 일치하지 않음"이벤트가 있습니다.

해결책 : 여기 에서 해결책을 찾았습니다 . 문제는 복제 된 가상 머신 (Windows Server 2008 R2, 하나의 도메인 컨트롤러 및 하나의 웹 서버)이있는 테스트 머신이었습니다. 둘 다 동일한 시스템 SID를 가지고 있었으며 분명히 문제를 일으켰습니다. 내가 한 일은 다음과 같습니다.

  1. 도메인에서 웹 서버를 제거하십시오.
  2. VM에서 c : \ Windows \ System32 \ Sysprep \ Sysprep.exe를 실행합니다.
  3. VM을 재부팅합니다.
  4. 웹 서버를 도메인에 가입시킵니다.

프로세스에서 일부 설정 (사용자 기본 설정, 고정 IP, 자체 서명 된 인증서 재생성)을 잃었지만 이제 다시 만들었으므로 모든 설정이 올바르게 작동합니다.


제한된 위임을 설정하려고 할 때 복제가 좋지 않습니다.
SideFX 2013 년

2

나는 또한 같은 문제가 있었다. 이 포럼과 다른 포럼에서 찾은 대부분의 것들을 시도했습니다.

드디어 약간의 RnD를하고 성공했습니다.

나는 들어갔다 IIS 설정 후 내 웹 사이트에 권한 옵션은 내 조직 도메인 사용자 그룹을 추가했다.

이제 모든 도메인 사용자에게 해당 웹 사이트에 대한 액세스 권한이 부여되었으므로 해당 문제가 발생하지 않았습니다.

도움이 되었기를 바랍니다


4
어떤 권한 옵션 에 대해 이야기하고 있습니까? 수행 한 작업에 대해 더 자세한 단계를 제공 할 수 있습니까?
Drew Chapin 2013 년

1

도메인 접두사 (예 : DOMAIN \ Username)로 로그인을 시도 했습니까? IIS 6은 기본적으로 호스트 컴퓨터를 기본 도메인으로 사용하므로 로그온 할 때 도메인을 지정하면 문제가 해결 될 수 있습니다.


1

위의 IIS 구성 트릭과 루프백 레지스트리 해킹을 시도한 후 앱 풀 권한 및 기타 사항을 검토하고 다시 생성했지만 IIS Express 또는 IIS 7.5를 사용하여 개발 워크 스테이션에서 실행중인 인증 루프를 제거 할 수 없었습니다. 로컬 또는 원격 브라우징 세션에서. 4 개의 401.2 상태 응답과 빈 페이지를 받았습니다. IIS 8.5 스테이징 서버에 배포 된 동일한 사이트가 완벽하게 작동합니다.

마지막으로 브라우저에 의해 공백으로 렌더링 된 응답 본문의 마크 업에 성공적인 로그인을위한 기본 페이지가 포함되어 있음을 확인했습니다. ASP.NET 및 HTTP에 대한 사용자 지정 오류 처리가 401 오류에 대해 Windows 인증을 방해하거나 방해하는 것으로 확인했습니다. 스테이징 서버는 아닙니다. 이 문제를 해결하는 데 몇 시간을 보냈지 만 401 오류에 대한 사용자 지정 처리를 제거하자마자 워크 스테이션이 정상으로 돌아 왔습니다. 나는 이것을 당신의 발을 쏘는 또 다른 방법으로 제시합니다.


0

IIS7.0 또는 IIS7.5의 Windows 인증은 응용 프로그램 풀 ID가 ApplicationPoolIdentity 인 경우 kerberos (provider = Negotiate)에서 작동하지 않습니다. 하나는 네트워크 서비스 또는 다른 기본 제공 계정을 사용해야합니다. 또 다른 가능성은 NTLM을 사용하여 Windows Authenticatio가 작동하도록하는 것입니다 (Windows 인증, 공급자에서 NTLM을 맨 위에 놓거나 협상 제거).

크리스 반 드 비버


3
틀 렸습니다. 서버를 재부팅하십시오. 이제 작동합니다. 핫픽스 KB2545850을 적용합니다.
아 미트 Naidu는

와. 재부팅이 나를 위해 해결했습니다. 시간을 지금 확인해야합니다. 어떤 아이디어? 아직 핫픽스를 조사하지 않았습니다.
mplwork apr

우리는 절대적으로 동일한 경우가있었습니다. Negotiate는 재부팅 할 때까지 ApplicationPoolIdentity와 함께 작동하지 않았습니다.
SergeyT 2015

0

응용 프로그램 풀에서 사용한 사용자 (Identity)가 IIS_IUSRS 그룹에 속하지 않는 동일한 문제가 발생했습니다. 사용자를 그룹에 추가하고 모든 것이 작동합니다.


0

필자의 경우 솔루션은 (위에서 제안한 조정 외에) 내 / 사용자의 로컬 개발 컴퓨터 / IIS (호스팅 서버) 를 다시 시작하는 것이 었습니다. 내 사용자가 새로 생성 된 AD 보안 그룹에 방금 추가되었으며 컴퓨터에서 로그 아웃 / 다시 시작하기 전까지 정책이 사용자 AD 계정에 적용되지 않았습니다.

이것이 누군가를 도울 수 있기를 바랍니다.


0

동일한 자격 증명 프롬프트 문제가 발생하여 빠른 검색을 수행했지만 인터넷에서 아무것도 해결하지 못했습니다. 어리석은 문제를 찾는 데 약간의 시간이 걸렸습니다.

IIS에서-> 고급 설정-> 물리적 경로 자격 증명 (비어 있음)

VM / 서버에 액세스 할 수있는 컴퓨터 ID (도메인 / 사용자)를 추가하자마자 암호 프롬프트가 중지됩니다.

도움이 되었기를 바랍니다


0

.net core 2 에서이 문제가 발생했으며 여기에서 대부분의 제안을 살펴본 후 web.config에서 설정을 놓친 것 같습니다.

<aspNetCore processPath="dotnet" arguments=".\app.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

올바른 설정은 forwardWindowsAuthToken = "true"였는데 지금은 분명해 보이지만 동일한 문제에 대한 상황이 너무 많으면 정확히 찾기가 더 어렵습니다.

편집 : 나는 또한 문제를 해결하는 다음 Msdn 문서에 도움이되는 것을 발견 했습니다.


-1

동일한 문제가 발생했으며 웹 응용 프로그램이 실행되는 응용 프로그램 풀의 응용 프로그램 풀 ID를 NetworkService로 변경하여 해결되었습니다. 여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.