قابلة لإعادة الاستخدام "حفظ بيانات الاعتماد" (مثل IE أو فيستا) في .NET أو WIN32

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

سؤال

في الآونة الأخيرة كنت أعمل في مكتب مع شبكة لاسلكية تستخدم مخطط مصادقة مزعج: كل بضع ساعات، تحتاج إلى فتح متصفح ونوع اسم مستخدم / كلمة مرور في صفحة ويب مصادقة، أو تفقد الوصول إلى الشبكة. (عند انتهاء الوقت، سيتم إعادة توجيه طلب المتصفح التالي الخاص بك إلى صفحة المصادقة، وإذا تم تمرير أعصادك، فسيتم إعادة توجيهك إلى الصفحة التي كنت تحاول الوصول إليها في الأصل).

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

لذلك لقد كتبت تطبيق صغير C # Console الذي سيتم تسجيل الدخول لي من خلال إرسال طلب HTTP إلى نموذج تسجيل الدخول باستخدام بيانات الاعتماد الخاصة بي.

من الواضح أن هذا غير آمن - كلمة المرور الخاصة بي تجلس داخل شفرة المصدر الخاصة بي للجميع لرؤية. أفضل أن أكون قادرا على حفظ بيانات الاعتماد الخاصة بي باستخدام نفس الآلية التي يستخدمها، على سبيل المثال، لحفظ وإعادة ملء كلمات المرور في نماذج الويب.

من الناحية المثالية، أود الحصول على مكون قابلة لإعادة الاستخدام لإدخال وإحداث بيانات الاعتماد واسترجها (بما في ذلك واجهة المستخدم مع خانة الاختيار "حفظ ائتمان" اختياري ") بحيث يمكن تطبيقي ببساطة فعل شيء مثل هذا (في pseudocode):

// retrieve any saved credentials from some secure place
Credentials creds = GetCreds(some parameters go here);

// if none stored, then show the user an "enter and optionally save credentials" dialog
if (creds == null)
    creds = GetCredsDialog(some parameters go here);

// POST to the authentication page
if (creds != null)
{
    string authUrl = "https://somehost/login/";
    string postDataPattern = "post data pattern here";

    // use SecureString here instead?
    string postData = string.Format (postDataPattern, HttpUtility.HtmlEncode(creds.Username), HttpUtility.HtmlEncode(creds.Password));
    WebClient wc = new WebClient();
    string html = wc.UploadString (authUrl, "POST", postData);

    // TODO: if html indicates login failure, clear stored credentials 
    // and ask for new creds. then retry.
}

في الأساس، أرغب في تحويل عبء تخزين الاعتمادات المؤمنة من تطبيقي إلى Windows، بموجب افتراض أن نظام Windows Guys سيكون أفضل في هذا مما سأكون فيه. :-)

أنا لا أبحث عن الأمن يرتدون الحديد هنا، مجرد شيء مماثل لما يستخدمه IE لتأمين كلمات المرور الأخرى المخزنة لمواقع الويب الأخرى. أنا فقط لا أريد الاحتفاظ بكلمات مرور نص عادي في التعليمات البرمجية الخاصة بي!

بالطبع، الحل المناسب هنا هو العمل مع قسم تكنولوجيا المعلومات للحصول عليها للحصول على مخطط مصادقة حقيقي لاسلكية، ولكن في هذه الأثناء أنا بمفردي.

سيكون حل .NET هو الأفضل، ولكن حل Win32 سيكون موافق جدا - يمكنني ببساطة منفذ التطبيق على C ++ دون الكثير من المتاعب.

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

المحلول

لتخزين بيانات الاعتماد، استخدم proteateddata. فئة في system.security.dll.
عن طريق المرور DataProtectionScope.CurrentUser, ، لا يوجد مستخدم آخر قادر على فك تشفير البيانات.

تعديل: للحصول على مربع الحوار، يمكنك استخدام creduipromptforcredentials. وظيفة API.

يرى هنا لمحة .NET.

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