2010-10-19 14 views
16

यह साबित होने से कहीं अधिक सरल होना चाहिए!आईआईएस 7 मूल प्रमाणीकरण जो साइट प्रमाणीकरण का उपयोग करता है

मेरे पास एक एएसपी.Net वेब ऐप है जो साइट के हिस्से को सुरक्षित करने के लिए FORMS प्रमाणीकरण का उपयोग करता है (यानी सदस्य लॉगिन क्षेत्र)।

अब मैं बस पूरी साइट पर एक पारंपरिक/सरल ब्राउज़र पासवर्ड पॉपअप (निर्देशिका सुरक्षा) रखना चाहता हूं क्योंकि हम इसका परीक्षण कर रहे हैं और नहीं चाहते कि कोई भी साइट पर ठोकर खाए और अधूरा संस्करण आदि देखें!

यह पुराने आईआईएस संस्करणों में सुपर सरल होता था।

मैंने "मूल प्रमाणीकरण स्थापित किया है" (क्योंकि आईआईएस 7 अब इस बॉक्स से बाहर नहीं आया है)। लेकिन जब मैं इसे सक्षम करता हूं, तो यह मुझे बताता है कि मैं इसे एक ही समय में सक्षम नहीं कर सकता क्योंकि किसी भी रीडायरेक्ट आधारित प्रमाणीकरण (जो मेरा फॉर्म प्रमाणीकरण उपयोग करता है)।

तो यह सिर्फ बेवकूफ है।

वास्तविक एप्लिकेशन के लिए web.config के अंदर सेट की गई अन्य प्रमाणीकरण विधि को प्रभावित किए बिना पूरी साइट पर सस्ते पॉपअप पासवर्ड डालने का एक बहुत ही आसान तरीका होना चाहिए।

बहुत धन्यवाद ..

अद्यतन आईपी उपयोग प्रतिबंध नहीं कारणों की एक जोड़ी के लिए अच्छे हैं: - मेरे आईपी गतिशील और इसलिए लगातार बदल रहा है। - मैं उन लोगों को परेशान नहीं करना चाहता हूं जिन्हें उन्हें अपनी मशीन पर कंसोल लाने और उनके आईपी पते को काम करने या उनके राउटर आदि की जांच करने के लिए साइट से देखने की ज़रूरत है। उनमें से कई गैर तकनीकी व्यवसाय उपयोगकर्ता हैं और यह उन्हें अपने आईपी पते को काम करने में एक घंटा लगेगा। - दोनों बुनियादी लेख और विंडोज़ ऑथ अंतर्निहित रूप प्रमाणीकरण को नीचे रहने की अनुमति नहीं देते हैं।

हमारे पास माइक्रोसॉफ्ट का एक बड़ा मामला है जो ओवर-इंजीनियर चीजों की कोशिश कर रहा है और नतीजतन एक सुपर सरल आयु-पुरानी आवश्यकताएं अब संभव या आसानी से उपलब्ध नहीं हैं। यह किसी भी तरह से संभव है ... कोई भी ???

उत्तर

2

वहाँ आप के लिए एक सरल उपाय है जब से तुम फॉर्म प्रमाणीकरण का उपयोग करना चाहते हैं ...

  1. मुख्य शीर्षक के अंतर्गत अपने web.config को यह अनुभाग जोड़ें। इसे मर्ज न करें - बस इसे एक ब्लॉक के रूप में पेस्ट करें। स्थान टैग शेष नियमों से इन नियमों को अलग करेगा। इसके बाद इसे आसानी से हटाने की अनुमति दें।

    <location allowOverride="false"> 
          <system.web> 
           <authentication mode="Forms"> 
            <forms loginUrl="frontdoor.aspx" name=".ASPXFORMSAUTH"> 
            </forms> 
           </authentication> 
           <authorization> 
            <deny users="?" /> 
           </authorization> 
          </system.web> 
         </location> 
    
  2. "frontdoor.aspx" नामक एक पृष्ठ बनाएं। इस लिंक से उस एएसपीएक्स पेज की सामग्री प्राप्त करें: http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx (जहां यह कहता है, नीचे स्क्रॉल करें: "लॉगऑन पेज बनाने के लिए")

  3. सब हो गया! यह आपकी पूरी साइट को लॉक कर देगा और आपको साइट के बाकी हिस्सों से स्वतंत्र रूप से फ्रंट दरवाजे के लिए उपयोगकर्ता नाम और पासवर्ड निर्दिष्ट करने की अनुमति देगा (मैं इस प्रक्रिया को "फ्रंट दरवाजा लॉक करना") कहता हूं।सामने के दरवाजे साख इस सशर्त में (पर्याप्त आप (हम) क्या जरूरत के लिए बहुत सुरक्षित है, लेकिन अच्छा नहीं) सामने वाले दरवाजे फ़ाइल अपने आप में निर्दिष्ट कर रहे हैं:

    [पंक्ति 6:]

    If ((UserEmail.Text = "TheSharedFrontDoorLogonName") And (UserPass.Text = "AndItsPassword")) Then 
    

अपनी जरूरतों के अनुसार सशर्त को संशोधित करें और फिर अपने ग्राहकों/व्यवसाय-प्रकार को सामने वाले दरवाजे पर प्रमाण-पत्र ई-मेल करें।

+0

यह समाधान यदि आप (मूल प्रवेश के साथ) कंपनी सह कार्यकर्ताओं को पहुंच देने के लिए आधारित प्रवेशों रूपों के लिए परीक्षण खाते का उपयोग करते समय चाहते हैं कोई काम नहीं होगा। – Dementic

4

मैं एक ही समस्या में भाग रहा हूं। मैं एक पूर्वावलोकन समूह तक सीमित बीटा साइट लगाएगा। वेबसाइट फॉर्म प्रमाणीकरण का उपयोग करती है लेकिन पूर्वावलोकन समूह के कुछ लोगों के पास वेबसाइट खाते होंगे और अन्य नहीं होंगे। भले ही पूर्वावलोकन में पहुंच प्राप्त करने के लिए सभी को रूट पर प्रमाणित करने की आवश्यकता होगी।

अभी तक एकमात्र चीज जिस तरह से मैं काम कर रहा हूं, वैसे ही Helicon Ape है। मैं परीक्षण चला रहा हूं और अब तक बहुत अच्छा हूं।

मानक। Htaccess फ़ाइल रूट में। username:encryptedpassword:

AuthUserFile c:\fakepath\.htpasswd 
AuthType Basic 
AuthName "SITE SECURITY" 
Require valid-user 

उपयोगकर्ता एक उपयोगकर्ता नाम और पासवर्ड को जोड़ने के लिए .htpasswd।

+0

क्या आप इस समाधान से चिपके थे? कोई कमी? – marapet

3

जो आप वर्णन करते हैं वह डिफ़ॉल्ट ASP.NET की सीमा है, यह केवल एक समय में एक प्रमाणीकरण मॉड्यूल चलाने के लिए बनाया गया है। समाधान अपना खुद का IHttpModule बनाना है जो आपके कस्टम प्रमाणीकरण करता है, और यदि सफल हो, तो एएसपी.NET को अनुरोध पास करें जो फॉर्म का उपयोग जारी रखता है।

निम्नलिखित मॉड्यूल का मूल कार्यान्वयन निम्न है। यह 401 Unauthorized वापस करेगा और उपयोगकर्ता को WOPR पर लॉगिन करने के लिए कहेंगे। इसके बाद निर्दिष्ट उपयोगकर्ता नाम को अनदेखा कर, Joshua पासवर्ड स्वीकार करेगा।

एक अलग विधानसभा के रूप में इस संकलित करें और अपने web.config में जोड़ने, system.web/httpModules और system.webServer/modules वर्गों में। आपके वेब एप्लिकेशन का कोई अन्य संशोधन आवश्यक नहीं है।

using System; 
using System.Text; 
using System.Web; 

namespace Research { 
    public class AuthenticationModule : IHttpModule { 
     public void Init(HttpApplication app) { 
      app.BeginRequest += (sender, e) => { 
       if (!Authenticate(app.Context)) { 
        app.Context.Response.Status = "401 Unauthorized"; 
        app.Context.Response.StatusCode = 401; 
        app.Context.Response.AddHeader("WWW-Authenticate", "Basic realm=WOPR"); 

        app.Response.ClearContent(); 
        app.Context.Response.End(); 
       } 
      }; 
     } 

     public void Dispose() { 
     } 

     public static Boolean Authenticate(HttpContext context) { 
      var authHeader = context.Request.Headers.Get("Authorization"); 
      if (String.IsNullOrEmpty(authHeader)) 
       return false; 

      if (!authHeader.StartsWith("Basic ")) 
       return false; 

      var base64Credentials = authHeader.Substring(6); 
      var binaryCredentials = Convert.FromBase64String(base64Credentials); 
      var asciiCredentials = Encoding.ASCII.GetString(binaryCredentials); 
      if (!asciiCredentials.Contains(":")) 
       return false; 

      var credentials = asciiCredentials.Split(new[] { ':' }, 2); 
      return credentials[1] == "Joshua"; 
     } 
    } 
} 
संबंधित मुद्दे