2014-11-11 3 views
1

Google 분석가를위한 인트라넷 MVC 4 애플리케이션을 작성하는 중입니다. 목표는 내부 사용자가 내부 네트워크의 일부인 경우 사인온하지 않고도이 응용 프로그램에 대한 액세스를 허용하는 것입니다. 그들은 응용 프로그램에 액세스 할 때 자신의 Windows 사용자 이름을 캡처하고 LDAP를 사용하여 활성 디렉토리에 대해 확인하고 그들이 속한 부서를 검색하고 화면에 관련 세부 정보를 표시 할 수 있기를 원합니다. 다른 포럼의 조언에 따라이 응용 프로그램에 대해 Windows 인증을 선택했으며 Visual Studio에서 성공적으로 실행중인 응용 프로그램을 테스트 할 수있었습니다. 내가 IIS 7.5를 실행하는 UAT 서버에 배포 할 때의 문제가 있습니다.ASP.NET 4의 신원 도용 MVC가 예상대로 작동하지 않습니다.

<authentication mode="Windows"> 
</authentication> 
<identity impersonate="false" /> 

이것은 내 Web.config 파일의 현재 상태입니다. 가장이 true 또는 false인지 여부에 관계없이 응용 프로그램은 응용 프로그램에 액세스하는 브라우저의 Windows 사용자 이름을 캡처하지 않는 것 같습니다.

은이 모든 필요한

가장 할 = 사실인가요? 홈 페이지의 환영 메시지에서 항상 응용 프로그램이 호스팅되는 컴퓨터의 Windows 사용자 이름/IIS가 실행되고 있습니다. 들어오는 사용자 요청의 Windows 사용자 이름을 캡처하는 다양한 방법을 시도했습니다.

string name = System.Web.HttpContext.Current.User.Identity.Name; 
string name = System.Web.HttpContext.Current.Request.LogonUserIdentity.Name; 
string name = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
string name = System.Web.HttpContext.Current.Request.ServerVariables["LOGON_USER"].Name; 

등 내가 여기에 다른 게시물은 this처럼 보입니다. 그러나 나는 그것을 작동시킬 수 없다. 나는 실제로 무슨 일이 일어나고 있는지 이해하기보다는 우연히이를 성취하려고 노력하는 것이 두렵다. 누군가 나를 올바른 방향으로 인도 해 주실 수 있습니까?

답변

2

아니요, 가장의 목적을 오해 한 것입니다.

먼저 IIS 7 이상에서 통합 모드로 실행되는 가장은 더 이상 지원되지 않습니다.

두 번째로, 가장 (impersonation)의 목적은 런타임에 작업자 프로세스가 실행되는 "사용자"를 변경하는 것입니다. 특히 해당 사용자로 파일 시스템이나 데이터베이스 리소스에 액세스 할 수 있습니다. 일반적으로 인증과 관련이 없으며 대부분의 웹 응용 프로그램에 특히 유용하지는 않습니다.

Windows 인증을 사용하려고하지만 인터넷 익스플로러에서만 작동한다는 것을 알아야합니다. 또한 도메인에 가입 된 서버에서만 작동하며 중간 Kerberos 인증 문제가 없습니다. (이들은 "더블 홉 (double hop)"문제라고도 함). 다른 브라우저는 기본적으로 Active Directory 계정 정보를 자동으로 제공하지 않지만 일부는 허용하도록 구성 될 수 있지만 다른 사용자는 그렇지 않습니다.

Windows 인증을 사용하여 올바르게 구성된 서버를 사용하고 있고 ActiveDirectory Kerberos 티켓 패스 스루를 지원하는 브라우저를 사용하고 있고이 패스 스루에 문제가되는 네트워크 문제가없는 경우 HttpContext.Current.User.Identity.Name을 사용하면 사용자 이름

인증 된 사용자 이름이 아닌 작업자 프로세스 만 제공하므로 LogonName 등을 사용하지 마십시오.