응용 프로그램 풀이 로컬 시스템이지만 IIS 7의 네트워크 서비스가 아닌 경우 제한 위임이 작동합니다.


0

Windows Server 2008의 제한 위임 및 IIS 7에 문제가 있습니다.

가장을 사용하여 SQL 보고서 서버에 액세스하는 웹 응용 프로그램이 있습니다. 이것은 신뢰할 수있는 위임 및 제한 위임과 함께 IIS 6에서 잘 작동했습니다. 그러나 IIS 7에 문제가 있습니다.

IIS 7에서 응용 프로그램 풀이 NetworkService로 실행되고 제한 위임이 구성된 상태에서 IIS 7의 경우 응용 프로그램 풀이 로컬 시스템으로 실행되면 보고서 서버에서 HTTP 401 Unauthorized 오류가 발생합니다. 가장이 잘 작동합니다.

클래식 파이프 라인과 통합 파이프 라인에서 테스트했습니다. 이 문제를 시뮬레이트하는 매우 간단한 테스트 페이지의 코드는 다음과 같습니다. Windows 2003의 IIS 6 서버에서 동일한 테스트 페이지를 실행하면 정상적으로 작동합니다. 보안 정책, IIS 구성 또는이 기능에 영향을 줄 수있는 서버 기능 및 역할에 대한 아이디어가 있습니까?

Kerberos가 제대로 작동하고 제한된 위임 구성이 올바른지 확인했습니다.

private void testImpersonation()
{
  string url = "http://testsvr7/reportserver/";

  System.Security.Principal.WindowsIdentity user =
    (System.Security.Principal.WindowsIdentity)Context.User.Identity;
  System.Security.Principal.WindowsImpersonationContext WICTX = null;

  StringBuilder results = new StringBuilder();

  try
  {
     if (user != null)
     {
        WICTX = user.Impersonate();
        results.AppendFormat("<br />Impersonating, user: {0}",   
             System.Security.Principal.WindowsIdentity.GetCurrent().Name);

        System.Net.HttpWebRequest myHttpWebRequest =
             (HttpWebRequest)WebRequest.Create(url);

        // Assign the credentials of the user being impersonated.
        myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

        System.Net.HttpWebResponse myHttpWebResponse =
             (HttpWebResponse)myHttpWebRequest.GetResponse();

        results.AppendFormat("<br />Authentication successful - {0}, {1}",
             url, CredentialCache.DefaultCredentials);
     }
  }
  catch (Exception ex)
  {
     results.AppendFormat("<br />Exception: {0}", ex.Message);
  }
  finally
  {
     if (WICTX != null)
     WICTX.Undo();
  }
  Response.Write(results.ToString());

답변:


1

해결 방법을 찾았습니다. system.webServer / security / authentication / windowsAuthentication의 useAppPoolCredentials 속성을 "true"로 설정하면 NetworkService를 사용하는 AppPool이 제한 위임에서 제대로 작동합니다.

Windows Server 2008 및 2008 R2에서 테스트되었습니다.

이것이 왜 그런지 잘 모르겠으며,이 설정의 기능과이 상황에 미치는 영향에 대한 명확한 문서를 얻는 것이 매우 어렵다는 것을 알게되었습니다. 2008 R2의 IIS 용 IIS 관리자에서 구성 편집기를 통해이 값을 설정할 수 있습니다.
또는 다음 명령을 사용하십시오 (2008 년에 R2가 아닌).

%windir%\system32\inetsrv\appcmd set config "Default Web Site/MyApplication" /section:system.webServer/security/authentication/windowsAuthentication /useAppPoolCredentials:true /commit:MACHINE/WEBROOT/APPHOST
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.