2009-09-10 2 views
19

인트라넷에 MVC 웹 응용 프로그램이 있으며 외부 파트너에게 보낼 FTP 서버에 파일을 만들 수 있기를 원합니다.ASP.NET MVC의 가장

가장에 대한 코드는 WindowsImpersonationContext를 사용합니다.

System.Security.Principal.WindowsImpersonationContext impersonationContext; 
impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); 

StreamWriter sw = System.IO.File.CreateText("PathOnFTPServer"); 
sw.Write("data"); 

impersonationContext.Undo(); 

여기 일어나고 있는지의 내 질문에 대한 이유 :

전 가장을

User.Identity.Name : [내 Windows 자격 증명]

System.Security.Principal. WindowsIdentity.GetCurrent(). 이름 : NT AUTHORITY \ NETWORK SERVICE

포스트 도용

User.Identity : [내 Windows 자격 증명]

GetCurrent.Name : [내 Windows 자격 증명]

로 가장 취소

User.Identity : [내 Windows 자격 증명]

GetCurrent.Name : NT AUTHORITY \ NETWORK SERVICE

따라서 가장하기 전에 현재 사용자가 시스템 계정이지만 가장을 사용하면 FTP 서버에서 텍스트 파일을 만들 수있는 권한이있는 Windows 도메인 계정을 사용하고 있습니다. 이 코드는 Visual Studio 웹 서버를 사용하여 로컬로 작동하지만 테스트 서버의 IIS에 배포하면 작동하지 않습니다.

액세스가 거부되었습니다. 오류가 발생했습니다. 올바른 사용자가 가장 된 경우 오류의 원인은 무엇입니까?

답변

22

가장은 컴퓨터 - 컴퓨터 가장을 허용하므로 클라이언트 브라우저와 서버는 가장 일 때 동일한 페이지에 있습니다. 그런 다음 네트워크 공유에 액세스하려고하면 컴퓨터가 가장 된 자격 증명을 신뢰하지 않습니다.

Active Directory에서 IIS 컴퓨터에 대한 위임을 사용하도록 설정해야합니다. Active Directory 사용자 및 컴퓨터로 이동하여 컴퓨터를 찾고 속성을 클릭하고 '위 임용 컴퓨터 트러스트'를 클릭하십시오. (이 작업을하려면 IIS를 다시 시작해야 할 수도 있지만 기억이 안납니다.)

나는 이것보다 더 많은 이론이 있지만 나는 완전히 이해하지 못하고 있지만 이것은 효과가있다. 그것은 옳은지 아닌지 다른 사람이 의견을 말할 수 있습니다!

또한 개발 컴퓨터에서 작동하는 이유는 개발 서버가 (Local) \ Network Service가 아닌 개발자로 실행되기 때문입니다.


괜찮은 링크 :

http://msdn.microsoft.com/en-us/library/cc949004.aspx

가장 및 위임의 차이점은 무엇입니까?

가장 (impersonation)는 원래 호출자의 ID를 동일한 컴퓨터의 백엔드 리소스로 전달합니다. 위임은 원래의 호출자의 ID를 서비스를 실행하는 컴퓨터가 아닌 다른 컴퓨터의 백엔드 리소스로 전달합니다.

예를 들어 서비스가 가장없이 IIS 내에서 실행되는 경우이 서비스는 IIS 5.0의 ASP.NET 계정 또는 IIS 6.0의 네트워크 서비스 계정을 사용하여 리소스에 액세스합니다. 가장을 사용하면 클라이언트가 원래 호출자의 계정을 사용하여 연결하는 경우이 서비스는 시스템 ASP.NET 계정 대신 원래 호출자의 계정을 사용하여 동일한 컴퓨터의 SQL Server 데이터베이스와 같은 리소스에 액세스합니다. 위임은 SQL Server 데이터베이스가 서비스와 다른 다른 컴퓨터에있을 수 있다는 점을 제외하면 비슷합니다.

+1

이것은 정확히 내가 알아 내려고 시도한 것입니다. 나는 가장이 기계를 건너 가지 않는다는 것을 깨닫지 못했습니다. –

+0

이봐, 나는 며칠 동안 가장을하려고했는데 갑자기 너는 내가 대표단과 함께 가야한다는 것을 깨달았다. 감사합니다. –