통합 Windows 인증을 사용하여 로그인 프롬프트 받기
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에 게시합니다.
작업중인 Windows 2008 서버가 있으므로 내 대답은 Windows 2003 서버의 OP와 완전히 동일하지 않습니다.
내가 한 일은 다음과 같습니다 (나중에 찾을 수 있도록 여기에 기록).
이 같은 문제가 발생했습니다.
내 Web.config 파일에는 다음 섹션이 있습니다.
<system.web>
<authentication mode="Windows" />
<authorization>
<allow users="*" />
<deny users="?" />
</authorization>
</system.web>
IIS에서는이 모든 것이 인증 아이콘 아래에서 해결되는 것 같습니다 .
- 권한 편집 : ASP.NET 계정에 권한이 있는지 확인하십시오. 내 것은 원래 추가되지 않았습니다.
이제 인증 기능으로 이동하십시오 .
다음을 사용하여 익명 인증 을 활성화 합니다 IUSR
.
Windows 인증을 활성화 한 다음 마우스 오른쪽 버튼을 클릭하여 공급자 를 설정합니다 .
NTLM이 가장 먼저 필요합니다!
다음으로 고급 설정 ... 에서 확장 된 보호 가 수락 이고 커널 모드 인증 사용 이 선택 되었는지 확인합니다 .
이 작업을 수행 한 후 웹 응용 프로그램으로 돌아가서 찾아보기 링크를 클릭하고 자격 증명을 다시 제공 할 필요없이 로그인했습니다.
많은 분들께 도움이 되셨기를 바라며, 나중에도 도움이되기를 바랍니다.
다른 사람들의 이익을 위해서. 오류가 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 이상?)에서도 로컬 인증을 위해이 구성 설정이 필요한 것 같습니다.
여기에있는 다른 모든 사람들의 의견이 나를 도와주지 않았기 때문에 이것은 나를 잠시 걸렸다. 이 기사를 찾았고 수정했습니다!
웹 사이트의 특정 부분 만 보호하고 싶은 비슷한 문제가있었습니다. IE를 제외한 모든 것이 잘 작동했습니다. 익명 및 Windows 인증을 모두 활성화했습니다. 익명의 경우 ID는 응용 프로그램 풀 ID로 설정됩니다. 문제는 Windows 인증에있었습니다. 주위를 파헤친 후 나는 fiddler를 시작하고 Kerberos를 공급자로 사용하고 있음을 발견했습니다 (실제로 기본적으로 협상으로 설정되어 있음). NTLM으로 전환하고 수정했습니다. HTH
다 우디
웹 보안에 [도메인 사용자] 권한을 추가하십시오.
- IIS에서 사이트 폴더 아래의 사이트를 마우스 오른쪽 버튼으로 클릭하십시오.
- 권한 편집 ...을 클릭합니다.
- 보안 탭을 선택하십시오.
- 그룹 또는 사용자 이름 섹션에서 편집 ... 버튼을 클릭합니다.
- 권한 팝업의 그룹 또는 사용자 이름에서 추가 ...를 클릭합니다.
- 개체 이름에 [도메인 사용자]를 입력하여 텍스트 영역을 선택하고 확인을 클릭하여 변경 사항을 적용합니다.
- 확인을 클릭하여 권한 팝업을 닫습니다.
- 확인을 클릭하여 속성 팝업을 닫고 새 설정을 적용하십시오.
모든 것을 변경하여 서버에 실수를하지 마십시오. 2008 R2에서 Windows 인증을 사용할 때 Windows에 로그온하라는 메시지가 표시되는 경우 각 응용 프로그램으로 Providers
이동하여 위로 이동 NTLM
하십시오. 때 Negotiate
목록의 첫 번째는, Windows 인증은 2008 R2의 특정 응용 프로그램에 대한 작업 속성을 중지 할 수 있습니다 당신은 결코 일보다는 사용자 이름과 암호를 입력하라는 메시지가 표시 될 수 있습니다. 이는 애플리케이션을 업데이트 할 때 발생합니다. NTLM
목록의 첫 번째 이상인지 확인 하면이 문제를 다시는 볼 수 없습니다.
URL에 도메인 이름에 점이있는 경우 IE는이를 로컬이 아닌 인터넷 주소로 취급합니다. 최소한 두 가지 옵션이 있습니다.
- server.domain을 대체하기 위해 URL에서 사용할 별칭을 가져옵니다. 예 : myapp.
- 컴퓨터에서 아래 단계를 따르십시오.
사이트로 이동하여 로그인 대화 상자를 취소하십시오. 이렇게하세요 :
IE의 설정에서 :
WindowsIdentity.GetCurrent
맞습니다 : APPPOOL 사용자를 가져와야합니다. 이는 코드를 실행하는 ASP.NET 프로세스가 현재 ID이기 때문입니다. 사이트 ID를 조회하는 사용자를 반환하려면 web.config에 다음 줄을 추가해야합니다.
<identity impersonate="true" />
이로 인해 프로세스는 페이지를 요청하는 사용자의 ID를 가정합니다. 모든 작업이 대신 수행되므로 네트워크의 폴더를 읽거나 데이터베이스 리소스 등에 액세스하려는 시도는 현재 사용자에게 해당 항목에 대한 권한이 필요함을 의미합니다. 여기에서 가장에 대한 자세한 내용을 읽을 수 있습니다 . 웹 / 데이터베이스 서버 토폴로지가 설정된 방식에 따라 가장이 켜져있는 경우 위임 문제가 발생할 수 있습니다.
그러나 원래 문제는 신원을 확인할 수 없으며 로그인 팝업이 표시된다는 것입니다. <deny>
IIS에서 익명 인증을 비활성화 한 경우 에는 차단이 필요하지 않습니다 . 우리는 그것을 포함하지 않습니다 (특수 <location>
블록 등을 제외하고 ) 그래서 나는 당신이 그것을 제거하고 다시 시도 할 수 있다고 말할 것입니다. 그래도 다른 모든 것은 옳게 들립니다.
IIS에서 응용 프로그램 풀을 실행하는 사용자를 지정하지 않았습니다. 사용자 지정 계정입니까 아니면 기본 계정입니까? 사용자 정의 인 경우 웹 서버의 도메인 계정입니까 아니면 로컬 계정입니까? 사용자 지정 계정에는 SPN 등록과 같은 몇 가지 단계가 더 필요할 수 있습니다. 또한 AD에서 들어오는 사용자의 계정을 해결하기위한 권한이없는 사용자 지정 계정에 문제가있을 수 있습니다.
IIS 로그를 확인하여 어떤 응답이 반환되는지 확인할 수도 있습니다. 401 일 가능성이 높지만 그 뒤에 401.2와 같은 하위 번호가 있어야합니다. 이 하위 번호는 때때로 근본 문제를 결정하는 데 도움이 될 수 있습니다. 이 KB 문서 에는 다섯 가지가 나열되어 있습니다.
이것은 나를 위해 그것을 고쳤습니다.
내 서버 및 클라이언트 PC는 Windows 7이며 동일한 도메인에 있습니다.
iis7.5에서 인트라넷에 대한 Windows 인증을 활성화합니다 (다른 모든 인증을 비활성화합니다. 또한 web.config 파일에서 Windows 인증을 언급 할 필요가 없습니다.
그런 다음 클라이언트 PC로 이동합니다. IE8 또는 9- 도구-인터넷 옵션-보안-로컬 인트라넷-사이트-고급-사이트 추가 ( "서버 확인 필요 ..."티켓 표시 제거 .. 필요 없음
IE8 또는 9- 도구-인터넷 옵션-보안-로컬 인트라넷-사용자 지정 수준-사용자 인증-로그온-현재 사용자 이름 및 암호로 자동 로그온 선택
이 설정을 저장합니다. 완료되었습니다. 더 이상 사용자 이름과 비밀번호를 입력하라는 메시지가 표시되지 않습니다.
클라이언트 PC가 도메인의 일부이므로이 설정에 대한 GPO가 있어야합니다. 그렇지 않으면 사용자가 다음에 Windows에 로그인 할 때이 설정이 다시 되돌아갑니다.
브라우저와 관련 될 수 있습니다. IE를 사용하는 경우 고급 설정으로 이동하여 "Windows 통합 인증 사용"확인란이 선택되어 있는지 확인할 수 있습니다.
제 경우에는 인증 설정이 제대로 설정되지 않았습니다.
나는해야했다
IIS 관리자에서 .NET 권한 부여 규칙 을 엽니 다.
및 제거 거부 규칙
인트라넷에서는 여기에 표시된대로 보안 설정을 조정하여 클라이언트 측에서 문제를 해결했습니다. 오른쪽의 확인란 중 하나가 우리에게 효과적이었습니다.
방금 ASP.Net 응용 프로그램에서 비슷한 문제를 해결했습니다.
증상 : 로컬 사용자를 사용하여 내 앱에 로그인 할 수 있지만, 시스템이 도메인에 올바르게 가입 된 경우에도 도메인 사용자가 아닙니다 (추가 참고 사항에서 말한대로). 보안 이벤트 뷰어에 ID = 4625 "도메인 sid가 일치하지 않음"이벤트가 있습니다.
해결책 : 여기 에서 해결책을 찾았습니다 . 문제는 복제 된 가상 머신 (Windows Server 2008 R2, 하나의 도메인 컨트롤러 및 하나의 웹 서버)이있는 테스트 머신이었습니다. 둘 다 동일한 시스템 SID를 가지고 있었으며 분명히 문제를 일으켰습니다. 내가 한 일은 다음과 같습니다.
- 도메인에서 웹 서버를 제거하십시오.
- VM에서 c : \ Windows \ System32 \ Sysprep \ Sysprep.exe를 실행합니다.
- VM을 재부팅합니다.
- 웹 서버를 도메인에 가입시킵니다.
프로세스에서 일부 설정 (사용자 기본 설정, 고정 IP, 자체 서명 된 인증서 다시 생성)을 잃었지만 이제 다시 생성 했으므로 모든 설정이 올바르게 작동합니다.
나는 또한 같은 문제가 있었다. 이 포럼과 다른 포럼에서 찾은 대부분의 것들을 시도했습니다.
드디어 약간의 RnD를하고 성공했습니다.
나는 들어갔다 IIS 설정 후 내 웹 사이트에 권한 옵션은 내 조직 도메인 사용자 그룹을 추가했다.
이제 모든 도메인 사용자에게 해당 웹 사이트에 대한 액세스 권한이 부여되었으므로 해당 문제가 발생하지 않았습니다.
도움이 되었기를 바랍니다
도메인 접두사 (예 : DOMAIN \ Username)로 로그인을 시도 했습니까? IIS 6은 기본적으로 호스트 컴퓨터를 기본 도메인으로 사용하므로 로그온 할 때 도메인을 지정하면 문제가 해결 될 수 있습니다.
위의 IIS 구성 트릭과 루프백 레지스트리 해킹을 시도한 후 앱 풀 권한 및 기타 사항을 검토하고 다시 생성했지만 IIS Express 또는 IIS 7.5를 사용하여 개발 워크 스테이션에서 실행중인 인증 루프를 제거 할 수 없었습니다. 로컬 또는 원격 브라우징 세션에서. 4 개의 401.2 상태 응답과 빈 페이지를 받았습니다. IIS 8.5 스테이징 서버에 배포 된 동일한 사이트가 완벽하게 작동합니다.
Finally I noticed markup in the Response Body that was rendered blank by the browser contained the default page for a successful log in. I determined that Custom Error handling for ASP.NET and HTTP for the 401 error was preventing/interfering with Windows Authentication my workstation but not the staging server. I spent several hours fiddling with this, but as soon as I removed custom handling for just the 401 error, the workstation was back to normal. I present this as yet one another way to shoot your own foot.
IIS7.0 또는 IIS7.5의 Windows 인증은 응용 프로그램 풀 ID가 ApplicationPoolIdentity 인 경우 kerberos (provider = Negotiate)에서 작동하지 않습니다. 하나는 네트워크 서비스 또는 다른 기본 제공 계정을 사용해야합니다. 또 다른 가능성은 NTLM을 사용하여 Windows Authenticatio가 작동하도록하는 것입니다 (Windows 인증, 공급자에서 NTLM을 맨 위에 놓거나 협상 제거).
크리스 반 드 비버
응용 프로그램 풀에서 사용한 사용자 (Identity)가 IIS_IUSRS 그룹에 속하지 않는 동일한 문제가 발생했습니다. 사용자를 그룹에 추가하고 모든 것이 작동합니다.
필자의 경우 솔루션은 (위에서 제안한 조정 외에) 내 / 사용자의 로컬 개발 컴퓨터 / IIS (호스팅 서버) 를 다시 시작하는 것이 었습니다. 내 사용자가 새로 생성 된 AD 보안 그룹에 방금 추가되었으며 컴퓨터에서 로그 아웃 / 다시 시작하기 전까지 정책이 사용자 AD 계정에 적용되지 않았습니다.
이것이 누군가를 도울 수 있기를 바랍니다.
동일한 자격 증명 프롬프트 문제가 발생하여 빠른 검색을 수행했지만 인터넷에서 아무것도 해결하지 못했습니다. 어리석은 문제를 찾는 데 약간의 시간이 걸렸습니다.
IIS에서-> 고급 설정-> 물리적 경로 자격 증명 (비어 있음)
VM / 서버에 액세스 할 수있는 컴퓨터 ID (도메인 / 사용자)를 추가하자마자 암호 프롬프트가 중지됩니다.
도움이 되었기를 바랍니다
.net core 2 에서이 문제가 발생했으며 여기에서 대부분의 제안을 살펴본 후 web.config에서 설정을 놓친 것 같습니다.
<aspNetCore processPath="dotnet" arguments=".\app.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
올바른 설정은 forwardWindowsAuthToken = "true"였는데 지금은 분명해 보이지만 동일한 문제에 대한 상황이 너무 많으면 정확히 찾기가 더 어렵습니다.
편집 : 나는 또한 문제를 해결하는 다음 Msdn 문서에 도움이되는 것을 발견 했습니다.
동일한 문제가 발생했으며 웹 응용 프로그램이 실행되는 응용 프로그램 풀의 응용 프로그램 풀 ID를 NetworkService로 변경하여 해결되었습니다.
'development' 카테고리의 다른 글
JavaScript에서 문자열 프리미티브와 문자열 객체의 차이점은 무엇입니까? (0) | 2020.08.17 |
---|---|
FontAwesome 아이콘이 표시되지 않습니다. (0) | 2020.08.17 |
이 CrashlyticsMissingDependencyException을 어떻게 해결할 수 있습니까? (0) | 2020.08.17 |
Emacs 창의 크기는 어떻게 설정합니까? (0) | 2020.08.17 |
새 브랜치에 변경 사항을 커밋하는 방법 (0) | 2020.08.17 |