2010-04-30 46 views
8

.net Innet'te barındırılan bir web sitesi olduğunda, web sitesinin şu andaki kullanıcısını nasıl çalıştırdığınızı öğrenin. yani Uygulama Havuzu kullanıcısı, siteye erişen mevcut kullanıcı değil.Impersonate = true kullanırken IIS'de geçerli uygulama havuzu kullanıcısı nasıl edinilir?

Pencereleri entegre ve taklit etme.

<authentication mode="Windows"/> 
<identity impersonate="true"/> 
+0

ne için? Bazı eylemler için uygulama havuzu kullanıcısını almanız gerekiyorsa, kimliğe bürünme şemanız doğru değildir. –

cevap

18

yönetilen kod uygulaması havuz kullanıcıya dönmek için kod:

using (WindowsIdentity.Impersonate(IntPtr.Zero)) 
{ 
    //This code executes under app pool user 
} 
+0

[Hızlı bağlantı] (https://msdn.microsoft.com/en-us/library/chf6fbt4 (v = vs.110) .aspx # remarksToggle) ilgili belgelere. –

0

Sadece kullanıcıyı görmeniz gerekiyorsa, o zaman sadece Environment.UserName kullanamazdınız?

Ortamımı bir Klasik Uygulama havuzu (Impersonation açık) ile çalıştırmak üzere yeniden yapılandırdım ve Kullanıcı, Impersonate açık olarak IUSR olarak çıkıyor.

+0

Aslında WindowsIdentity'yi kullanıcı adı değil – Simon

2

Bir çözüm bulundu.

RevertToSelf'ı kullanarak, kimliğe bürünmeyi bir iş parçacığından çıkarabilirsiniz. IIS'de bu, Uygulama Havuzu kullanıcısına eşittir.

Bazı doco

http://msdn.microsoft.com/en-us/library/aa379317%28VS.85%29.aspx

http://www.pinvoke.net/default.aspx/advapi32.reverttoself Ve aşağıdakileri yapabilirsiniz

[DllImport("advapi32.dll", SetLastError = true)] 
    static extern bool RevertToSelf(); 

    private static WindowsIdentity GetAppPoolIdentity() 
    { 
     WindowsIdentity identity = null; 
     Win32Exception win32Exception = null; 
     var thread = new Thread(o => 
         { 
          if (!RevertToSelf()) 
          { 
           var win32error = Marshal.GetLastWin32Error(); 
           win32Exception = new Win32Exception(win32error); 
          } 

          identity = WindowsIdentity.GetCurrent(); 
         }); 
     thread.Start(); 
     thread.Join(); 
     if (win32Exception != null) 
     { 
      throw win32Exception; 
     } 
     return identity; 
    } 
+0

istiyorum ** bu thisRequest.LogonUserIdentity.Name' ** – Kiquenet

0

John Simons: Tam olarak ne istedim, teşekkürler. VB.net sürümü için:

With System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero) 
    Dim sCurrentUserName As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name 
End With 
İlgili konular