NTLM

2009-08-06 8 views
8

के माध्यम से उपयोगकर्ताओं का प्रतिरूपण करना मेरे पास एक आंतरिक एप्लिकेशन है जिसमें सुरक्षा के दो स्तर हैं। क्लाइंट-फेस एप्लिकेशन के लिए प्रपत्र प्रमाणीकरण और प्रबंधन इंटरफ़ेस के लिए एनटीएलएम एकीकृत प्रमाणीकरण।NTLM

मैं आसानी से उचित बनाकर ग्राहकों का प्रतिरूपण कर सकता हूं। फॉर्म्स प्रमाणीकरण वर्ग 'विधियों के साथ .SPXAUTH कुकी। हालांकि NTLM के लिए HTTP प्रमाणीकरण शीर्षलेख उत्पन्न करना अब तक मेरे बाहर है।

मुझे यह आलेख मिला जब मुझे यह आलेख मिला (http://msdn.microsoft.com/en-us/library/ms998358.aspx#paght000025_usingimpersonation) लेकिन तब मुझे एहसास हुआ कि यह केवल अनुरोध की अवधि के लिए कोड चलाने के लिए एक संदर्भ बनाता है। और मैं सर्वर को यह सोचने के लिए अपना पूरा सत्र बदलना चाहता हूं कि मैं एक और डोमेन लॉगिन का उपयोग कर रहा हूं। मेरे पास मेरे खाते पर प्रशासनिक विशेषाधिकार हैं, इसलिए यह डोमेन पासवर्ड को चारों ओर खराब करने या चोरी करने के उद्देश्य से नहीं है।

क्या यह भी संभव है? धन्यवाद।

उत्तर

7

मान लें कि आपके पास फॉर्म प्रमाणीकरण सक्षम है ASP.NET ऐप लॉगिन फॉर्म login.aspx के साथ है और आपके उपयोगकर्ता डीबी में संग्रहीत हैं। अब आप दोनों फॉर्म, और विंडोज प्रमाणीकरण का समर्थन करना चाहते हैं। मैं यही करता हूं:

फॉर्म के लिए मैं एसक्यूएल डीबी का उपयोग करता हूं, कहें, उपयोगकर्ता तालिका। मैं इस तालिका नई WindowsUserName नामित स्तंभ जिसमें मैं में प्रपत्र कम्प्यूटर \ उपयोगकर्ता

मैं एक विधि है, जो एक प्रतिक्रिया है कि शो के लिए लॉग इन करेंगे खिड़की भेज देंगे जोड़ने login.aspx रूप में विंडोज उपयोगकर्ता का नाम बचा सकते हैं करने के लिए जोड़ें:

if (Request.QueryString["use"] == "windows") 
{ 
    var windowsuser = Request.ServerVariables["LOGON_USER"]; 
    if (windowsuser.Length == 0) 
     ActivateWindowsLogin(); 
    else 
    { 
     // get userId from DB for Windows user that was authenticated by IIS 
     // I use userId in .ASPXAUTH cookie 
     var userId = GetUserIdForWindowsUser(windowsuser); 
     if (userId > 0) //user found 
     { 
      // here we get User object to check roles or other stuff 
      var user = GetApplicationUser(userId); 
      // perform additional checks here and call ActivateWindowsLogin() 
      // to show login again or redirect to access denied page. 
      // If everythig is OK, set cookie and redirect 
      FormsAuthentication.SetAuthCookie(userId.ToString(), false); 
      Response.Redirect(FormsAuthentication.GetRedirectUrl(userId.ToString(), false), true); 
     } 
     else //user not found 
      ActivateWindowsLogin(); 
    } 
} 
else 
{ 
    //your Forms auth routine 
} 

GetUserIdForWindowsU:

private void ActivateWindowsLogin() 
{ 
    Response.StatusCode = 401; 
    Response.StatusDescription = "Unauthorized"; 
    Response.End(); 
} 

समवेयर आई तरह <a href="login.aspx?use=windows">Admin</a>

एक लिंक login.aspx Page_Load में मैं जोड़ लिया है है ser और GetAplicationUser सिर्फ नमूने के लिए मेरे तरीके हैं।

+0

बात यह है कि दो प्रमाणीकरण योजनाएं वेब साइट के दो अलग-अलग हिस्सों को नियंत्रित करती हैं, और मैं उन्हें मिश्रण नहीं कर सकता। मैं उन्हें दो अलग-अलग अनुप्रयोगों में अलग करने की योजना बना रहा हूं। एक बार किया - मैं फॉर्म AuthCookie का उपयोग कर सकते हैं, लेकिन अभी भी डोमेन खातों के साथ मान्य है। –