통합 Windows 인증이 켜져 있을 때 ASP(클래식)는 어떤 계정으로 실행됩니까?

통합 Windows 인증이 켜져 있을 때 ASP(클래식)는 어떤 계정으로 실행됩니까?

동일한 가상 디렉터리 아래의 동일한 서버에서 실행되는 ASP.NET 웹 서비스에 웹 서비스 요청을 시도하는 ASP 파일이 있습니다. IIS에서는 가상 디렉터리가 익명 액세스를 비활성화하도록 설정되고 "통합 Windows 인증"이 켜져 있습니다.

따라서 문제는 사용자의 컴퓨터가 ASP 페이지를 실행하거나 WebService.asmx .NET 파일을 수동으로 실행하도록 요청하면 사용자의 자격 증명이 전달되기 때문에 작동하지만 ASP 파일이 웹 서비스를 호출하려고 하면 다음과 같은 오류가 발생한다는 것입니다. 401.2 - 승인되지 않음: 서버 구성으로 인해 액세스가 거부되었습니다.

예를 들어:

  • 사용자 컴퓨터의 브라우저에서 "DIRECTORY\user1"이 정상적으로 작동하는 Service.asmx를 요청합니다.
  • 사용자 컴퓨터의 브라우저에서 "DIRECTORY\user1"이 File1.asp를 요청하면 정상적으로 작동합니다.
  • __________은(는) 서버의 File1.asp 내에서 401.2를 반환하는 Service.asmx를 요청합니다.

그래서 ASP 계정 읽기 및 실행 권한을 허용하기 위해 WebService.asmx에 NTFS 권한을 설정해야 한다고 가정했지만 어떤 계정에서 실행되는지는 모르고 일부 응답을 읽은 후 추가로 생각해 보면 다음과 같습니다. NTFS 수준에 도달하지 못하는 경우 익명 액세스가 꺼져 있기 때문에 IIS는 요청을 완전히 거부합니다.

이는 도메인 계정에서 ASP 프로세스를 실행해야 함을 의미합니까?

답변1

기본 ASP는 HTTP 세션에서 서버에 인증된 사용자를 가장하여 실행됩니다. 클래식 ASP 응용 프로그램을 실행하거나 익명 액세스를 허용하려면 인증하는 사용자에게 권한을 부여해야 합니다.

이미 "인증된 사용자"를 시도했지만 작동하지 않는다면 파일 권한 문제가 없는 것입니다.

"...ASP 파일이 웹 서비스를 호출하려고 합니다..."라는 말은 무슨 뜻인가요? ASP 스크립트가 서버에 다시 HTTP 요청을 보내고 있다는 뜻입니까? 그렇다면 "Windows 통합 인증"은 다른 서버(또는 자체)에 인증할 때 사용할 일반 텍스트 암호를 서버에 제공하지 않기 때문에 해당 요청에 사용자 자격 증명이 전달되지 않습니다.

편집하다:

귀하의 의견에 따르면, 위에 언급한 바와 같이 Windows 통합 인증이 서버에 다른 서버(또는 이 경우 다른 서버인 자체)로 전달할 일반 텍스트 암호를 제공하지 않기 때문에 서버에는 사용자를 인증하는 데 사용할 자격 증명이 없습니다. ).

시도해 볼 수 있는 세 가지 방법은 다음과 같습니다.

  • 익명 액세스를 허용하기 위해 WebService.asmx를 얻을 수 있다면 서버 자체 HTTP 호출이 작동해야 합니다(IUSR_xxx가 파일을 읽을 수 있도록 허용하여 명시적으로 익명 액세스를 허용해야 합니다).그리고IIS 관리 콘솔 스냅인을 통해 파일 자체의 "익명 액세스 및 인증 제어" 설정을 수정하면 해당 파일은 활성화된 "통합 Windows 인증" 및 비활성화된 "익명 액세스" 설정을 상속받게 됩니다. 디렉토리에 있습니다).

  • HTTP 요청을 소싱하는 데 사용하는 컨트롤이 로그인한 사용자의 자격 증명을 원격 서버에 투명하게 제공하는 것을 지원하는 경우 클래식 ASP 스크립트에서 "기본 인증"을 활성화할 수 있습니다(서버에 전달할 일반 텍스트 암호 제공). 다른 서버에) HTTP 요청 제어가 WebService.asmx 요청 중에 해당 일반 텍스트 비밀번호를 전달할 수 있도록 합니다. 이 시점에서 일반 텍스트 암호를 차단하기 위해 기본 ASP 스크립트에 액세스할 때 SSL을 요구할 수 있습니다.

  • 마지막으로 기본 ASP 스크립트의 일부 기본 인증 자격 증명을 하드 코딩하고 WebService.asmx 파일에서 기본 인증을 활성화할 수 있습니다. 이는 WebService.asmx가 항상 동일한 사용자의 액세스를 볼 수 있음을 의미합니다.

그 중 어느 것도 아주 좋은 해결책은 아닙니다. 클래식 ASP 스크립트를 실행하기 위해 인증한 사용자로 백엔드 계층(데이터베이스 등)에 인증하려고 할 때 "클래식 ASP"에서 본 "클래식" 문제에 직면하게 됩니다.

답변2

통합 인증이 켜져 있고 사용자가 Windows 통합 인증을 수행하는 브라우저를 사용하는 경우그리고사용자는 웹 서버로 변환되는 계정으로 로그인되어 있습니다(예: 클라이언트 시스템이 웹 서버와 동일한 도메인에 있음). 스크립트는 해당 사용자의 계정으로 실행됩니다.

위 중 하나라도 거짓이면(서버가 클라이언트 브라우저와 사용자 계정을 동의할 수 없음) 익명 사용자로 설정한 것이 IUSR_<machine>기본적으로 사용됩니다. 또는 익명 탐색이 비활성화된 경우 사용자는 다음을 수행합니다. 401.* 오류가 발생합니다.

이는 다른 인증 의견이 꺼져 있다고 가정합니다. Windows 통합 인증 체계와 기본 인증 체계를 동시에 활성화한 경우 무엇이 우선적으로 적용되는지 잘 모르겠습니다.

reqeust.servervariables 컬렉션을 쿼리하고 관련 값을 출력하는 스크립트를 삽입하여 웹 서버가 현재 특정 영역에 대한 요청에 사용하고 있는 사용자를 볼 수 있습니다. 사용자 이름이 여기에 있습니다.

답변3

"이중 홉" 인증을 시도하고 있는 것 같습니다. 일반적으로 이는 백엔드 SQL 서비스의 컨텍스트에서 발생하지만 제 생각에는 동일한 서버에서 실행되는 별도의 서비스에 적용될 수도 있습니다(100% 확실하지는 않습니다). MSKB에서 "더블 홉"이라는 용어를 검색하면 이것이 작동할 수 있도록 위임을 설정하는 방법을 설명하는 몇 가지 문서를 얻을 수 있습니다. 여기서부터 시작하겠습니다.http://support.microsoft.com/kb/326985

필요한 것은 IIS 서버를 "위임 허용"으로 설정하는 것입니다. 사용자가 Windows 통합 인증을 통해 인증되면 Kerberos 티켓을 받아야 합니다(NTLM 인증을 받는 경우에는 작동하지 않습니다).

위임을 수행하려면 서버에 SPN을 추가해야 합니다. 사용자가 서버에 AD에 대한 SPN이 있는 실제 FQDN을 사용하여 웹 페이지에 액세스하고 있는지 확인하십시오. SPN(서비스 사용자 이름)은 사용자 Kerberos 에이전트가 요청을 다음 서비스로 전달할 때 IIS 서버가 사용자를 가장할 수 있도록 하는 올바른 Kerberos 티켓을 만드는 데 사용하는 것입니다.

답변4

웹 서비스가 로그인한 사용자의 자격 증명을 사용하는 것이 중요합니까? MSXML2.ServerXMLHTTPRequest와 같은 것을 사용하여 웹 서비스를 호출하는 경우 .Open 메서드에 자격 증명 정보를 제공하여 고정된 자격 증명 집합을 웹 서비스에 제공할 수 있습니까?

관련 정보