2016-09-19 4 views
5

으로 가장을 설정하면 두 개의 디렉토리에있는 파일의 수를 계산하는 매우 간단한 프로젝트를 만들었습니다. User1Directory2에 액세스 할 수 없으며 User2Directory1에 액세스 할 수 없습니다. 가장으로 인해 내 응용 프로그램을 호출하는 사용자에 따라 단 하나의 숫자 만 가져야합니다. 두 사용자 모두 관리자로 설정됩니다.첫 번째 이해를 위해 ASP.NET

그래서 Visual Studio 2015 (Windows 8.1에서 실행)에서 새 MVC 프로젝트를 만들고 Windows 인증을 사용하도록 선택했습니다. 응용 프로그램이 실행되고 ISS Express에서 내 컴퓨터 (Active Directory 없음)에서 User1으로 전환하고 Internet Explorer에서 웹 사이트를 호출합니다 (예 : "통합 Windows 인증"이 설정에서 사용 가능). 이 설정을 사용하면 HttpContext.User.Identity의 사용자는 User1이고 WindowsIdentity.GetCurrent()은 내 개발 사용자, 즉 Visual Studio에서 작업하는 사용자입니다.

은 또한 수동으로 가장하기 위해 노력했다 ". 필요한 가장 수준이 제공되지 않았 어느거나, 제공된 가장 수준이 올바르지 않습니다"

WindowsIdentity winId = (WindowsIdentity)User.Identity; 
WindowsImpersonationContext ctx = null; 
try 
{ 
    ctx = winId.Impersonate(); 

    // GetNumbers() tries to get the number of files for both directories  
    numbers = GetNumbers(); 
} 
catch (Exception e) 
{ 
} 
finally 
{ 
    if (ctx != null) 
    { 
     ctx.Undo(); 
    } 
} 

불행하게도, 나는 예외를 얻을 어떤 사람들은이 문제가 자신의 문제를 해결했다고 주장했습니다. https://kc.mcafee.com/corporate/index?page=content&id=KB56194 나를위한 것이 아닙니다. User1과 내 사용자를 목록에 추가하고 컴퓨터를 다시 시작했습니다. 변경 없음.

https://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingusinglogonuser에 설명 된대로 별도의 로그인을 사용하면 가장을 할 수 있습니다. 단점은 매우 분명합니다. 사용자의 암호가 있어야하며 사용자가 이미 로그인 한 경우 왜 다시 로그인해야합니까? 나를 위해 그것을했다. 내 Web.config

<authentication mode="Windows" /> 
<authorization> 
    <deny users="?" /> 
</authorization> 

내 프로젝트 설정은

이 내게로 큰 변화없이 새로운 프로젝트이지만, 단지 전성 검사에 대한 몇 가지 자세한 내용은 ...

  • "익명 인증"은 false
  • "Windows 인증 이온 관리 pipline 모드 "예상대로이 간단한 프로젝트 작업을 만들기 위해 변경하는 것에 대한 Integrated

어떤 제안이다"true

  • 이다 "?

    안부, 카슨

  • 답변

    3

    나는 마침내 (IIS Express 및 IIS)를 작동하도록 관리! 위에서 언급했듯이 첫 번째 접근 방식은 프로토 타입 일뿐입니다. 마지막 목표는 서버 A에서 실행되는 GUI와 서버 B에서 실행되는 API를 만드는 것이 었습니다. 둘 다 ASP.NET에서 구현되었습니다. "관리 pipline 모드가"Classic로 설정 (프로젝트를 선택한 후를 누르십시오 F4)

    <system.web> 
        <authentication mode="Windows" /> 
        <authorization> 
        <deny users="?" /> 
        </authorization> 
        <identity impersonate="true" /> 
    </system.web> 
    

    프로젝트 속성 :

    은 GUI의 Web.config

    와 API는 이러한 설정을 얻었다.

    그래서 어딘가에 가장이 HttpClient과 함께 작동해야하는지에 대한 토론을 보았습니다. 그것이라고 말했다. 글쎄, 그것은 나를 위해하지 않았다. 그리고 다양한 HTTP 메소드를 사용하는 경우 WebClient은 재미 있지 않습니다. 그래서 RestSharp로 전환 :

    RestClient client = new RestClient(baseUrl); 
    client.Authenticator = new NtlmAuthenticator(); 
    
    • 비주얼 스튜디오에 대한 특별 참고 사항 : 당신은 관리자 그렇지 않으면 가장은 IIS 익스프레스에서 작동하지 않습니다 Visual Studio를 시작해야한다!
    • IIS 용 특별 참고 사항 : 응용 프로그램 풀은 Classic "관리 파이프 라인 모드"를 사용해야합니다.
    • 특별 참고 사항 (테스트 중) : 처음에는 API가 인증을 요청했으나하지 말아야합니다. 그 이유는 아주 간단했다 : 내 개발 컴퓨터에서 내 사용자 user1 다음 다른 암호 내 대상 컴퓨터에서 user1 ...

    나는이 사람을 도움이되기를 바랍니다했다.

    관련 문제