Comment obtenir l'utilisateur du pool d'applications en cours dans IIS lors de l'utilisation impersonate = true?

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

Question

Dans .net quand un site Web hébergé dans IIS comment obtenez-vous l'utilisateur actuel du site est en cours d'exécution sous. à savoir l'utilisateur Application Pool pas l'utilisateur en cours d'accéder au site.

Utilisation de fenêtres intégrées et usurper l'identité.

<authentication mode="Windows"/>
<identity impersonate="true"/>
Était-ce utile?

La solution

Pour revenir à l'utilisateur du pool d'application en code managé, vous pouvez effectuer les opérations suivantes:

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

Autres conseils

trouvé une solution.

Utilisation RevertToSelf vous pouvez dépouiller l'usurpation d'identité d'un fil. Dans IIS, ce qui correspond à l'utilisateur Piscine App.

Certains doco

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

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

Et le code

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

Si vous avez besoin de voir uniquement l'utilisateur alors vous ne pourriez pas utiliser juste Environment.UserName?

Je viens reconfiguré mon environnement pour fonctionner avec une piscine classique App (avec usurpation d'identité sur) et l'utilisateur vient comme IUSR avec Impersonate sur.

John Simons: Exactement ce que je voulais, Merci. Pour la version VB.net:

With System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero)
    Dim sCurrentUserName As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name
End With
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top