Frage

In .net, wenn eine Website in IIS gehostet, wie Sie den aktuellen Benutzer erhalten Sie die Website unter ausgeführt wird. dh die Anwendung Pool Benutzer nicht die der aktuelle Benutzer Zugriff auf die Website.

Mit Windows integriert und impersonate.

<authentication mode="Windows"/>
<identity impersonate="true"/>
War es hilfreich?

Lösung

Für die App Pool-Benutzer in verwalteten Code zurückgreifen Sie folgende Möglichkeiten:

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

Andere Tipps

eine Lösung gefunden.

Mit RevertToSelf Sie den Identitätswechsel von einem Thread Streifen können. In IIS Dies entspricht die App-Pool Benutzer.

Einige doco

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

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

Und der 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;
    }

Wenn Sie rein müssen, um den Benutzer zu sehen dann konnte nicht Sie verwenden nur Environment.UserName?

Ich rekonfiguriert nur meine Umgebung zu laufen mit einem Pool Klassischen App (mit Identitätswechsel auf) und die Nutzer kommen als IUSR mit Impersonate auf.

John Simons: Genau das, was ich wollte, Danke. Für VB.net Version:

With System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero)
    Dim sCurrentUserName As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name
End With
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top