사용자가 로밍 프로필 사용자 계정을 사용하여 로그인하는 mvc4 웹 응용 프로그램이 있습니다. Active Directory
을 통해 인증합니다. 그리고 거의 모든 방법에서 일부 파일 작업을하기 위해 로그인 한 사용자를 가장해야합니다.전체 세션을 통해 가장 할 수 있습니까?
가 나는 흉내를위한 다음 방법을 사용하십시오
[DllImport("advapi32.dll", SetLastError = true)]
public static extern int LogonUser (string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern int ImpersonateLoggedOnUser (IntPtr hToken);
[DllImport("advapi32.dll", SetLastError = true)]
static extern int RevertToSelf();
[DllImport("kernel32.dll", SetLastError = true)]
static extern int CloseHandle (IntPtr hObject);
private IntPtr lnToken;
내가 IDisposable
클래스로 내 impersonater을 구현하고 constructor
에서 내가 가장하고 Dispose
방법에 나는 나의 가장 전에 켜져 사용자에게 되돌립니다. 그래서 이렇게 내 컨트롤러 방법에 쉽게 using
문에서 사용할 수 있습니다 :
public ActionResult SomeAction (string param)
{
using (new Impersonator(username, password, nameSpace))
{
/// do staff
}
}
를이 방법은 잘 작동, 나는이 약 1.5 초 I에 대한 웹 사이트의 응답 시간을 느리게한다는 생각하지만 이것을 조금 성가신 찾으십시오.
내가 로그 아웃하거나 세션이 종료 될 때 사용자가 로그인하고 되돌릴 때 가장을 만들 수 있습니까? 즉 세션을 통해 가장 (impersonation)을 유지할 수 있습니까?
정확한 용어를 사용하지 않았을 수 있습니다. 죄송합니다.
IIS가 인증을 처리한다고 가정 할 수 있습니까? 우리는이 응용 프로그램과 함께 이렇게, 그리고 IIS는 또한 당신을 위해 가장을 처리 - 전체 요청은 사용자의 컨텍스트에서 실행됩니다 –
예 IIS에서 내 웹 사이트를 실행합니다. 그러나 IIS가 로그인 할 때마다 다른 방법으로 가장 할 수 있습니까? 또는 IIS에서 응용 프로그램 풀의 ID에 대해 이야기하고 있습니까? –
예, 각 사용자는 개별적으로 가장합니다. 이 시점에서 상황은 앱 풀의 보안 컨텍스트가 아닌 보안 컨텍스트에서 실행됩니다. –