your programing

통합 윈도우즈 인증을 사용하여 로그인 프롬프트 수신

lovepro 2023. 5. 22. 22:18
반응형

통합 윈도우즈 인증을 사용하여 로그인 프롬프트 수신

윈도우즈 2003 서버의 IIS 7에서 .NET 3.5 응용 프로그램을 실행하고 있으며 로그인 메시지가 계속 표시되므로 통합 윈도우즈 인증을 제대로 받을 수 없습니다.다른 모든 보안 유형이 비활성화된 상태에서 IIS에서 Windows 인증을 사용하도록 설정했으며 응용 프로그램 web.config 파일 인증/인증이 다음과 같이 설정되었습니다.

<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 파일을 수정하여 바로 입력한 다음 응답을 추가했습니다.쓰기(시스템).보안.주요한.WindowsIdentity.getcurrent().user.name .toString()을(를) 사용하여 인증에 사용 중인 사용자를 확인합니다.결과는 IIS APPPOOL\myapp이며, 이는 분명히 내 애플리케이션의 IIS 애플리케이션 풀입니다.

Windows 인증만 사용하고 팝업을 표시하지 않고 실제 Windows 사용자에 대해 Windows 인증이 수행되도록 모든 사용자가 지원해 주셔서 감사합니다.

감사해요.


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

로그인이 실패하고 Windows 로그인 프롬프트가 다시 표시되면 "SERVERNAME"으로 로그인을 시도한 사용자 이름이 표시됩니다.\"USERNAME\"은 도메인이 아닌 서버에 대해 사용자의 유효성을 검사하려고 한다고 생각하게 했습니다.이를 확인하기 위해 네트워크 도메인 사용자와 동일한 사용자 이름과 비밀번호로 앱 서버에 직접 로컬 사용자 계정을 생성하고 다시 로그인을 시도했습니다.그 결과 다시 로그인 프롬프트를 받았지만 이번에 사용자 이름과 비밀번호를 입력했을 때 성공적으로 로그인할 수 있었습니다.네트워크 사용자와 앱 서버가 동일한 도메인에 있으므로 IIS 인증이 도메인 계정이 아닌 로컬 앱 서버 계정을 가리키는 이유를 잘 모르겠습니다.저는 이 시점에서 이것이 IIS 질문이라는 것을 알고 있기 때문에 forums.iis.net 에도 글을 올리지만, 그 이후로 며칠 동안 이 문제를 해결해 온 사람이 있을 수 있는 조언에 감사드립니다.

제가 작업 중인 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 인증

그런 다음 고급 설정에서 확인...확장 보호가 수락되고 커널 모드 인증 사용이 선택됩니다.

고급 설정

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

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

단지 다른 사람들의 이익을 위해서.가 오가다경우인 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에서 사이트를 마우스 오른쪽 단추로 클릭합니다.
  • 사용 권한 편집...을 클릭합니다.
  • 보안 탭을 선택합니다.
  • 그룹 또는 사용자 이름 섹션에서 편집...을 클릭합니다.단추를 채우다
  • 사용 권한 팝업의 그룹 또는 사용자 이름에서 추가...를 클릭합니다.
  • 객체 이름에 [Domain Users]를 입력하여 텍스트 영역을 선택하고 [확인]을 클릭하여 변경사항을 적용합니다.
  • 확인을 클릭하여 권한 팝업을 닫습니다.
  • 확인을 클릭하여 속성 팝업을 닫고 새 설정을 적용합니다.

URL에 도메인 이름에 점이 있는 경우 IE는 URL을 로컬이 아닌 인터넷 주소로 간주합니다.두 가지 이상의 옵션이 있습니다.

  1. URL에서 server.domain을 대체하는 데 사용할 별칭을 가져옵니다.예를 들어, 내 앱.
  2. 컴퓨터에서 아래 단계를 수행합니다.

사이트로 이동하여 로그인 대화 상자를 취소합니다.이 경우:

여기에 이미지 설명 입력

IE 설정에서:

여기에 이미지 설명 입력

여기에 이미지 설명 입력

여기에 이미지 설명 입력

모든 것을 변경하여 서버에서 실수를 범하지 마십시오.할 때 R2에서 Windows Authentication으로 하십시오.Providers합니다.NTLM각 응용 프로그램에 대해 입력합니다.NegotiateWindows Authentication은 목록의 첫 번째 항목으로, 2008 R2에서 특정 응용 프로그램의 작업 속성을 중지할 수 있으며 사용자 이름과 암호를 입력하라는 메시지가 표시될 수 있습니다.응용프로그램을 업데이트할 때 이 문제가 발생할 수 있습니다.확인만 해주세요.NTLM이 목록의 첫 번째 항목이며 다시는 이 문제를 볼 수 없습니다.

이것으로 해결되었습니다.

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

  1. in iis7.5 - 인트라넷에 대한 윈도우즈 인증을 사용하도록 설정합니다(다른 모든 인증 사용 안 함).또한 web.config 파일에서 Windows 인증에 대해 언급할 필요가 없습니다.

  2. 그런 다음 클라이언트 PC로 이동합니다.IE8 또는 9 - 도구-인터넷 옵션-보안-로컬 인트라넷-사이트-고급-사이트 추가("서버 verfi 필요" 제거)티켓마크..줄 필요가 없어.

  3. IE8 또는 9 - Tools-internet Options-Security-Local Intranet-Custom 수준-User Authentication-logon - 현재 사용자 이름과 암호를 사용하여 자동 로그온 선택

  4. 이 설정을 저장합니다.당신은 끝났습니다.사용자 이름 및 암호를 묻는 메시지가 더 이상 표시되지 않습니다.

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

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

<identity impersonate="true" />

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

그러나 원래 문제는 ID를 확인할 수 없고 로그인 팝업이 표시된다는 것입니다.당신은 필요하지 않다는 것을 알아두겠습니다.<deny>IIS에서 익명 인증을 사용하지 않도록 설정한 경우 차단합니다.는 그것을 (하고).<location>블록 등)을 제거하고 다시 시도할 수 있습니다.하지만 다른 모든 것은 옳은 것처럼 들립니다.

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

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

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

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

해야만 했어요

  1. IIS Manager에서 .NET 권한 부여 규칙 열기

    IIS Manager에서 .NET 권한 부여 규칙 열기
  2. 거부 규칙 제거

    거부 규칙 제거

인트라넷에서 이 문제는 여기에 표시된 대로 보안 설정을 조정하여 클라이언트 측 클라이언트에서 해결되었습니다.오른쪽에 있는 확인란 중 하나가 작동했습니다.

IE 인터넷 옵션

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

증상:컴퓨터가 도메인에 올바르게 가입되어 있더라도 로컬 사용자를 사용하여 앱에 로그인할 수 있지만 도메인 사용자는 로그인할 수 없습니다(추가 노트에서 설명한 대로).보안 이벤트 뷰어에서 ID=4625 "도메인 사이드 불일치" 이벤트가 발생했습니다.

솔루션:여기서 해결책을 찾았습니다.문제는 가상 시스템을 복제한 테스트 시스템(윈도우즈 서버 2008 R2, 도메인 컨트롤러 1개, 웹 서버 1개)이었습니다.둘 다 동일한 기계 SID를 가지고 있어 문제가 발생한 것으로 보입니다.제가 한 일은 다음과 같습니다.

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

프로세스에서 일부 설정(사용자 기본 설정, 정적 IP, 자체 서명된 인증서 다시 만들기)을 해제했지만, 이제 다시 생성하니 모든 것이 제대로 작동합니다.

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

약간의 자체 RnD를 한 후에 마침내 성공했습니다.

IIS 설정으로 이동한 다음 웹 사이트 권한 옵션에 조직 도메인 사용자 그룹을 추가했습니다.

이제 제 모든 도메인 사용자가 해당 웹 사이트에 대한 액세스 권한을 부여받았기 때문에 저는 그 문제에 직면하지 않았습니다.

이것이 도움이 되길 바랍니다.

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

마지막으로 브라우저에서 빈칸으로 표시된 응답 본문의 마크업에 성공적인 로그인을 위한 기본 페이지가 포함되어 있다는 것을 알게 되었습니다.401 오류에 대한 ASP.NET 및 HTTP에 대한 사용자 지정 오류 처리가 내 워크스테이션의 Windows Authentication을 방해하거나 방해하는 것이지 스테이징 서버를 방해하는 것이 아니라고 판단했습니다.저는 이것을 만지작거리며 몇 시간을 보냈지만, 401 오류에 대한 맞춤형 처리를 제거하자마자 작업대는 정상으로 돌아왔습니다.저는 이것을 여러분 자신의 발을 쏠 수 있는 또 다른 방법으로 제시합니다.

.net core 2에서 이 문제를 겪고 있었는데 여기서 대부분의 제안을 검토한 결과 web.config의 설정을 놓친 것 같습니다.

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

올바른 설정은 forwardWindows(윈도우)AuthToken="참"인 것처럼 보이지만 동일한 문제에 대한 상황이 너무 많을 때는 정확히 파악하기가 어렵습니다.

편집: 문제를 해결하는 데 도움이 되는 다음 Msdn 기사도 발견했습니다.

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

레지스트리에 추가

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa solved my problem. 

NTLM 인증 요청에서 참조할 수 있는 로컬 보안 기관 호스트 이름을 만듭니다.

이렇게 하려면 클라이언트 시스템의 모든 노드에 대해 다음 단계를 수행합니다.

  1. Start딸깍하는 소리Run, 편집기regedit 를클합다니를 클릭합니다.OK.

  2. 키를 합니다.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0

  3. 마우스 오른쪽 단추 클릭MSV1_0을 가리키다.New 를클합다니를 클릭합니다.Multi-String Value.

  4. 에 이름열다입니력다합을음에를 합니다.BackConnectionHostNames 를누니다릅을 누릅니다.ENTER.

  5. 마우스 오른쪽 단추 클릭BackConnectionHostNames 를클합다니를 클릭합니다.Modify.

  6. Value데이터 상자에 시스템의 로컬 공유에 사용되는 CNAME 또는 DNS 별칭을 입력한 다음 확인을 클릭합니다.

메모

  • 각 호스트 이름을 별도의 행에 입력합니다.만약에

  • BackConnectionHostNames이 레스트항 합니다.REG_DWORD 입력란,
    은 당은삭야합니다를 .BackConnectionHostNames레지스트리 항목.출구는
    레지스트리 편집기를 선택한 다음 시스템을 재시작합니다.

원본: 윈도우즈 Server 2003 서비스 1을 설치한 후 FQDN 또는 CNAME 별칭을 사용하여 서버에 로컬로 액세스하려고 하면 오류 메시지가 표시됩니다. 액세스가 거부되었거나 지정된 네트워크 경로를 수락한 네트워크 공급자가 없습니다.

Windows Server 2019에서 변경한 후 다시 시작할 필요가 없었습니다.

애플리케이션 풀 ID가 ApplicationPoolIdentity인 경우 IIS 7.0 또는 IIS 7.5의 윈도우즈 인증이 kerberos(프로바이더=Identity)와 함께 작동하지 않습니다. 사용자는 네트워크 서비스 또는 다른 기본 제공 계정을 사용해야 합니다.또 다른 가능성은 NTLM을 사용하여 Windows 인증이 작동하도록 하는 것입니다(Windows Authentication, Provider에서는 NTLM을 상위에 두거나 협상 제거).

크리스 반 데비버

애플리케이션 풀에서 사용한 사용자(Identity)가 IIS_IUSRS 그룹 이하가 아니기 때문에 동일한 문제가 발생했습니다.사용자를 그룹에 추가하고 모든 작업을 수행했습니다.

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

이것이 누군가에게 도움이 되기를 바랍니다.

동일한 자격 증명 요청 문제가 발생하여 빠른 검색을 수행했지만 인터넷에서 해결할 수 있는 것은 없습니다.문제를 찾는 데 시간이 좀 걸렸습니다. 바보 같은 문제죠.

IIS -> 고급 설정 -> 물리적 경로 자격 증명(공백)

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

이것이 도움이 되길 바랍니다.

동일한 문제가 발생했으며 웹 애플리케이션이 실행되고 있는 애플리케이션 풀의 애플리케이션 풀 ID를 NetworkService로 변경하여 해결되었습니다.

언급URL : https://stackoverflow.com/questions/5402381/receiving-login-prompt-using-integrated-windows-authentication

반응형