В .NET, когда веб-сайт разместил в IIS, как Вы получаете текущего пользователя, под которым работает веб-сайт. т.е. пользователь Пула приложений не текущий пользователь, получающий доступ к сайту.
Используя интегрированные окна и являются олицетворением.
<authentication mode="Windows"/>
<identity impersonate="true"/>
Чтобы вернуться к пользователю пула приложений в управляемом коде, вы можете сделать следующее:
using (WindowsIdentity.Impersonate(IntPtr.Zero))
{
//This code executes under app pool user
}
Если вам просто нужно увидеть пользователя, не могли бы вы просто использовать Environment.UserName?
Я только что перенастроил свою среду для работы с Классический пул приложений (с включенным олицетворением), и пользователь отображается как IUSR с включенным олицетворением.
Нашел решение.
Используя RevertToSelf, вы можете удалить олицетворение из потока. В IIS это соответствует пользователю пула приложений.
Некоторая документация
http://www.pinvoke.net/default.aspx/advapi32.reverttoself
http://msdn.microsoft.com/en-us/library/aa379317%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;
}