كيفية الحصول على مستخدم تجمع التطبيقات الحالي في IIS عند استخدام انتحال شخصية = صحيح؟

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

سؤال

في .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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top