Как получить текущий пользователь пула приложений в IIS при использовании empersonate = true?

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

Вопрос

В .Net, когда сайт, размещенный в IIS, как вы получаете текущий пользователь, на веб-сайте под управлением. Т.е. пользователь пула приложения не текущий пользователь, доступа к сайту.

Использование Windows Integrated и empersonate.

<authentication mode="Windows"/>
<identity impersonate="true"/>
Это было полезно?

Решение

Чтобы вернуться к пользователю пула приложения в управляемом коде, вы можете сделать следующее:

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

Другие советы

Нашел решение.

Используя Reverttoself, вы можете разбить осилию из нити. В IIS это приравнивается к пользователю пула приложения.

Некоторые DOCO

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

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

И код

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

Если вы чисто надо увидеть пользователя, то не сможете просто использовать Envirment.username?

Я только что покончил в мою среду, чтобы бежать с классическим приложенным пулом (с подражанием), и пользователь выходит как IUSR с осентом.

Джон Саймонс: именно то, что я хотел, спасибо. Для версии VB.NET:

With System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero)
    Dim sCurrentUserName As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name
End With
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top