كيفية الحصول على مستخدم تجمع التطبيقات الحالي في IIS عند استخدام انتحال شخصية = صحيح؟
-
02-10-2019 - |
سؤال
في .NET عندما يتم استضافة موقع ويب في IIS كيف تحصل على المستخدم الحالي الذي يعمل عليه الموقع. أي مستخدم تجمع التطبيقات وليس المستخدم الحالي يصل إلى الموقع.
باستخدام Windows متكامل وانتحال شخصية.
<authentication mode="Windows"/>
<identity impersonate="true"/>
المحلول
للعودة إلى مستخدم تجمع التطبيقات في التعليمات البرمجية المدارة ، يمكنك القيام بما يلي:
using (WindowsIdentity.Impersonate(IntPtr.Zero))
{
//This code executes under app pool user
}
نصائح أخرى
وجدت حل.
باستخدام 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;
}
إذا كنت بحاجة بحتة إلى رؤية المستخدم ، فلا يمكنك استخدام البيئة. اسم المستخدم؟
لقد قمت فقط بإعادة تشكيل بيئتي لتشغيل تجمع التطبيق الكلاسيكي (مع انتحال شخصية) ويخرج المستخدم كـ IUSR مع انتحال شخصية.
جون سيمونز: بالضبط ما أردت ، شكرا. لنسخة VB.NET:
With System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero)
Dim sCurrentUserName As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name
End With