Как получить текущий пользователь пула приложений в IIS при использовании empersonate = true?
-
02-10-2019 - |
Вопрос
В .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