Come ottenere il pool utente dell'applicazione corrente in IIS quando si utilizza impersonate = true?

StackOverflow https://stackoverflow.com/questions/2741728

Domanda

In .net quando un sito web ospitato in IIS come si fa a ottenere l'utente corrente il sito è in esecuzione in. cioè l'utente del pool di applicazioni non l'utente corrente l'accesso al sito.

Utilizzando finestre integrati e impersonate.

<authentication mode="Windows"/>
<identity impersonate="true"/>
È stato utile?

Soluzione

Per ripristinare l'utente pool di applicazione in codice gestito è possibile effettuare le seguenti operazioni:

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

Altri suggerimenti

Trovato una soluzione.

Utilizzando RevertToSelf si può mettere a nudo la rappresentazione da un thread. In IIS questo equivale per l'utente del pool di applicazioni.

Alcuni doco

http://www.pinvoke.net/default.aspx/advapi32.reverttoself

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

E il codice

    [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;
    }

Se puramente bisogno di vedere l'utente, allora non si potrebbe semplicemente usare Environment.UserName?

Ho appena riconfigurato il mio ambiente per far funzionare con un pool Classic App (con rappresentazione su) e l'utente esce come IUSR con Rappresenta su.

John Simons: Esattamente quello che volevo, grazie. Per la versione VB.net:

With System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero)
    Dim sCurrentUserName As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name
End With
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top