2010-06-30 2 views
1

기본적으로 내가 기존 웹 사이트에 일하고 있어요이 게시물 Accessing mapped drives when impersonating in ASP.NET는 가장

같은 문제를 실행 해요를 사용하여 매핑 된 드라이브에 쓸 수 없습니다와 나는 관리자가 사이트의 로고, 배너를 변경할 수 있도록해야합니다 데스크탑의 이미지 파일에서 서버의 매핑 된 드라이브로 이동합니다.

그래서 웹 사이트는 드라이브에 저장해야 할 때마다 가장을 사용하고 있으며 정상적으로 작동합니다. 그러나 나는 그들의 테스트 환경이나 테스트 환경에서 작동하도록 할 수는 없다.

¿ 어떤 아이디어가 있습니까? 사용자와 암호를 두 번 확인했습니다 (코드가 도메인을 지정하지 않음). 문제가 아닙니다.

public bool ImpersonateUser(String user, String password, String domain) 
{ 
    WindowsIdentity tempWindowsIdentity; 
    IntPtr token = IntPtr.Zero; 
    IntPtr tokenDuplicate = IntPtr.Zero; 

    if (RevertToSelf()) 
    { 
     if (LogonUserA(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0) 
     { 
      if (DuplicateToken(token, 2, ref tokenDuplicate) != 0) 
      { 
       tempWindowsIdentity = new WindowsIdentity(tokenDuplicate); 
       impersonationContext = tempWindowsIdentity.Impersonate(); 
       if (impersonationContext != null) 
       { 
        CloseHandle(token); 
        CloseHandle(tokenDuplicate); 
        return true; 
       } 
      } 
     } 
    } 
    //... rest of the code 

그리고 -sanitized- 시험 :

if (impUtility.ImpersonateUser("user", "password", string.Empty)) 
{ 
    fu.SaveAs(@"C:\Images\" + imgName); 
} 

답변

0

나는 그 중 하나가 작동 가져올 수 없습니다

여기에 가장이 처리하는 코드에서 발췌 한 것입니다.

그런 다음 구현할 수 있다고하더라도 더 쉬운 방법이 있음을 알았습니다. 내가 한 것은 대상 컴퓨터에서 폴더를 공유하고 내 응용 프로그램을 사용할 사용자에게 읽기/쓰기 권한 만 부여하는 것입니다.

//Impersonate user to save file on server 
WindowsIdentity wi = (WindowsIdentity)User.Identity; 
WindowsImpersonationContext wic = null; 

try 
{ 
    wic = wi.Impersonate(); 
    if (wi.IsAuthenticated) 
     asyncFileUpload.SaveAs(location); 
} 
catch (Exception ex) 
{ 
    //Log Error or notify here 
    success = false; 
} 
finally 
{ 
    if (wic != null) 
     wic.Undo(); 
} 

사용자를 위해 AD 그룹을 만들고 숨겨진 공유 드라이브에서 해당 사용자에 대한 읽기/쓰기 권한을 부여했습니다. 이렇게하면 각 사용자에 대해 매핑 된 드라이브를 만들지 않아도되므로 유지 관리가 더 쉬워집니다.

+0

@ Ed B : 감사합니다. 나는 그것을 시험해 보겠습니다. 나는 몇 가지 질문을 가지고있다 : 1)이 솔루션은 모든 관리자가 동일한 계정으로 로그인해야 함을 의미합니까? 2) 왜 각 사용자에 대해 매핑 된 드라이브를 만들어야하는지 알지 못했습니다. 예에서 관리자는 계정으로 로그인하지만 디스크에 쓸 때 사용되는 사용자 이름과 암호는 Web.config –

+0

에서 가져온 권한있는 계정에서 가져온 것입니다. 사용자가 이미 Windows 자격 증명으로 사이트에 로그인 한 경우 위와 같이 대상 컴퓨터에서 로그인 한 사용자의 신원을 가장 할 수 있습니다. 2. 좋아, 나는 특권 계좌가 있다는 것을 깨닫지 못했다. 매핑 된 드라이브를 사용하여 이미 설정된 계정으로 작업 할 수있는 매핑 된 드라이브 방법을 얻지 못했습니다. –