الحصول على أوراق اعتماد NTLM من الاستجابة على صفحة ASPX

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

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي صفحة ASPX (على ملقم A) التي يتم استدعاء باستخدام بيانات اعتماد NTLM. جزء من وظيفة تلك الصفحة هو الدعوة الى صفحة HTML (على ملقم B) والوكيل مرة أخرى إلى العميل. (جدار الحماية يسمح بالوصول إلى A، ولكن ليس لB. عادة أن يسمح للمستخدم الوصول إلى خادمي). خادم B هي أيضا ليست مفتوحة للوصول المجهول، لذلك أنا بحاجة إلى توفير أوراق اعتماد لذلك.

إذا أنا ترميز ثابت للبعض وثائق التفويض (كما في رمز المرفقة)، وأنها تعمل، ولكن من الناحية المثالية أن اردد ما قاله بيانات الاعتماد التي تم استلامها من قبل صفحة .aspx. هل هناك طريقة للحصول على تلك NetworkCredentials حتى أتمكن من تمريرها؟

protected void Page_Load(object sender, EventArgs e) { 
    Response.Clear(); 
    WebClient proxyFile = new WebClient(); 
    CredentialCache cc = new CredentialCache(); 
    cc.Add(new Uri("http://serverB/"), "NTLM", 
        new NetworkCredential("userName", "password", "domain")); 
    proxyFile.Credentials = cc; 

    Stream proxyStream = proxyFile.OpenRead("http://serverB/Content/webPage.html"); 
    int i; 
    do { 
        i = proxyStream.ReadByte(); 
        if (i != -1) { 
            Response.OutputStream.WriteByte((byte)i); 
        } 
    } while (i != -1); 
    Response.End(); 
} 
هل كانت مفيدة؟

المحلول

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

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

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

نصائح أخرى

وPage.User سوف تحصل على مدير الأمن للمستخدم الصفحة يعمل تحت.

ومن هناك يجب أن تكون قادرة على معرفة بها.

هل لك في السيناريو الخاص بك انتحال هوية المتصلين؟ وبهذه الطريقة لن تحتاج حتى لتمرير جنبا إلى جنب وثائق التفويض، مثلا:

<authentication mode="Windows" />
<identity impersonate="true" />

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

وهيريس وصلة لإقامة التمثيل: HTTP: // MSDN .microsoft.com / EN-US / مكتبة / ms998351.aspx # paght000023_impersonatingorigcaller

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