سؤال

ولدي التطبيق شبكة معقدة إلى حد ما التي تم بناؤها (من قبل المقاول) لاستخدام المصادقة المتكاملة. كجزء من عملية المصادقة، يتم استخدام وظيفة GetNetworkID() التي تبدو مثل هذا:

private string GetNetworkID()
{
    return HttpContext.Current.User.Identity.Name.Split(new char[] { '\\' })[1];
}

عند تشغيل هذه على مربع تطوري، وقيمة HttpContext.Current.User.Identity.Name هي myNetwork \\ myUserID ، لذلك إرجاع funciton أعلاه اسم المستخدم الخاص بي، على النحو المنشود، وعملية authenticaiton يعمل على ما يرام.

ولكن عند تشغيل هذا على خادم الويب الخاص بي، وأنا الحصول على تم الفهرس خارج حدود الصفيف خطأ القيت من قبل عبارة الإرجاع في وظيفة GetNetworkID().

وأنا قليلا خسر حول كيفية استكشاف هذه وكيفية معرفة ما اذا كان قضية تكوين IIS (خادم الويب الخاص بي هو ويندوز سيرفر 2008 مربع تشغيل IIS 7)، أو أي شيء آخر.

إذا أنا بجد رمز اسم المستخدم الخاص بي على أنها القيمة مقابل وظيفة GetNetworkID()، وأنها تعمل على خادم الويب، ولكن ليس لدي أي أفكار كبيرة حول كيفية تصحيح على خادم الويب لتحديد ما هي عودة HttpContext.Current.User.Identity.Name قيمة وهذا ما يسبب الخطأ مؤشر مجموعة.

وأي اقتراحات؟

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

المحلول

يدير

وIIS مثل حساب خدمة IIS، لذلك Current.User.Identity ومن المرجح سيكون اسم حساب IIS.

لأجل اكتمال، يجب التحقق من وجود '\' إما مع بحث () أو عن طريق الاتصال الانقسام، والتحقق من طول المصفوفة الناتجة. إذا كان طول 1، وهذا يعني أن الهوية ليست في شكل المجال \ اسم المستخدم.

في عام، إذا كنت ترغب في تصحيح، يمكنك كتابة أي قيمة للتيار استجابة HTTP مثل ذلك:

Response.Write(HttpContext.Current.User.Identity.Name)

والطريقة الأخرى هي إعداد متغير صفحة ASP، وتعيين متغير الصفحة إلى القيمة التي ترغب في تفتيشها. يمكنك عرض قيمة المتغير إما عن طريق كود ASP، أو من خلال جافا سكريبت.

نصائح أخرى

هل يمكن أن يكون في عداد المفقودين بيئة IIS.

وحاول في IIS: الموقع (فوق الحق) | عقارات | أمان الدليل (علامة التبويب)

وانقر على "تحرير ..."

ثم حدد "مصادقة Windows المتكاملة"

وأعتقد أن المستخدم الذي يسجل في و applciation الويب الخاص بك على خادم آخر، ليس تسجيل ساري المفعول. وبالتالي لا يتم إرجاع نتيجة لذلك على User.Identity.Name.

وكما قلت، وأنها تعمل عند ضمنية اسم المستخدم. وهذا يعني، وcreditials المستخدم من الكمبيوتر الذي تستخدمه للدخول غير مسموح به على موقع الويب الخاص بك. هذا وبالتالي يجب أن تكون مختلفة لأوراق الاعتماد كنت hardcoding.

وأفضل رهان هو تصحيح على خادم الويب (ليس من الصعب - كل ما تريد العودة هو User.Identity.Name ويمكنك الحصول على اسم المستخدم واستنتاج منطقي من هناك)، والتحقق من محتويات الويب الخاص بك ملف .config.

وكما أشار آلان خارج (وأنا upvoted له لذلك) ربما كنت ترغب في إضافة الاختيار على الشكل الذي User.Identity.Name يأخذ. يمكن روتين المحدثة على سبيل المثال تبدو هذه:

private string GetNetworkID()
{
    var name = HttpContext.Current.User.Identity.Name;
    return name.InStr("\\") > -1 ? name.Split("\\")[1] : name;
}

وهذا سيعود الجزء الثاني من اسم تسجيل الدخول إذا كان \ هو الحاضر، وسلسلة كاملة إن لم يكن.

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