سؤال

لدى شركتي تطبيق كبير ونحن بصدد الانتهاء منه.يستخدم WCF باعتباره العمود الفقري مع Active Directory للمصادقة.يعمل هذا بشكل مثالي مع أحد الموقعين حيث أن نموذج المصادقة هو Windows ويجب أن تكون جزءًا من المجال لتسجيل الدخول إلى الموقع.السؤال الذي أطرحه يتعلق بالموقع الآخر الذي يمكن الوصول إليه خارجيًا.يقوم بتعيين ClientCredentials.Windows.ClientCredential لاستدعاء الوكيل مع مستخدم/ممر محدد لانتحال شخصية مستخدم AD حتى يعمل نموذج الأمان الكامل.كل هذا يعمل تمامًا كما هو متوقع أيضًا.

السؤال الذي لدي هو أنه يمكنني استخدام HttpContext.Current.User.Identity.Name على الويب للحصول على المستخدم الذي قام بتسجيل الدخول حاليًا من قطعة مصادقة النماذج، ولكن للقيام بذلك يجب أن أتأكد من وجود مرجع System.Web مقابل DLL الذي أعمل فيه حاليًا.تأتي كائناتنا الأساسية من فئة مبسطة لا تعرف شيئًا عن System.Web.هل هناك طريقة لمعرفة مستخدم النماذج الذي قام بتسجيل الدخول داخل مشروع الكائن الأساسي هذا؟لقد قمت بتجريب System.Security.Principal ولكن ذلك يمنحني إمكانية الوصول إلى حسابات Windows فقط مما يمكنني قوله ولن يفيدني بأي شيء.

أعلم أن أحد الخيارات هو الرجوع فقط إلى System.Web والانتهاء منه، لكن هذا يبدو صعبًا للغاية بالنسبة لي وليس الخيار الأفضل، لذا آمل الحصول على بعض النصائح هنا.

هل كانت مفيدة؟

المحلول

وThread.CurrentPrincipal.Identity سوف تفعل الشيء نفسه بالضبط كما HttpContext.CurrentContext...

ووسيعود الهوية المرتبطة موضوع تنفيذ الحالي، الذي هو تسجيل الدخول للمستخدم * في معظم الحالات.

ملحوظة: * إذا كنت تستخدم / وفد التمثيل أو تشغيل كحساب الخدمة، فإنه سيعود الحساب الذي هوية أي وقت مضى موضوع قيد، ولكن في حالتك، فإنه لا يبدو وكأنه كنت تفعل أي سياق تبديل الهوية.

نصائح أخرى

إذا كان اسم المستخدم كسلسلة يكفي بالنسبة لك،

Environment.UserName
// Environment.UserDomainName and MachineName can also be useful

من MSDN:

يحصل على اسم المستخدم للشخص الذي بدأ الموضوع الحالي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top