2011-10-18 5 views
12

मेरे पास एक नियंत्रक है जो आंतरिक वेब एप्लिकेशन में पृष्ठों को प्रस्तुत करता है जिन्हें विंडोज प्रमाणीकृत करने की आवश्यकता होती है। जेएसओएन-आधारित प्रश्नों के लिए सिस्टम में एक दूसरा नियंत्रक मौजूद है जो Windows प्रमाणीकृत होने की आवश्यकता नहीं है? क्या यह संभव है? ऐसा प्रतीत होता है कि मैं इस समय केवल एक या दूसरे को करने में सक्षम हूं।एमवीसी 3: क्या एक नियंत्रक को विंडोज प्रमाणीकरण की आवश्यकता होती है जबकि एक सेकंड गुमनाम की अनुमति देता है?

कोई सुझाव?

+1

"केवल एक या दूसरे ऐसा करने में सक्षम हो गया", तब आपने वास्तव में कैसे किया? – bzlm

+0

आपने विंडोज़ ऑथ को वास्तव में कैसे सक्षम किया है? – gideon

+0

आईआईएस सेटिंग्स में विंडोज प्रमाणीकरण सक्षम है और यह अनामित भी अनुमति दे रहा है। Web.config में <प्रमाणीकरण मोड = "विंडोज़" /> है। मैंने नियंत्रक को [प्राधिकृत] विशेषता जोड़ा जो मुझे संरक्षित करने के लिए आवश्यक था और इसे उस नियंत्रक से बाहर छोड़ दिया जिसे मैं बेनकाब करना चाहता था। – Shawn

उत्तर

6

हाँ उपयोग करना चाहते में AuthorizeAttribute

उदाहरण के लिए

तो साथ इस संभाल कर सकते हैं। क्या प्रमाणीकरण आप चुनते के आधार पर, आप Authorize

यह लेख वास्तव में प्रस्तुत करता है के साथ अपने नियंत्रक के कार्रवाई विधि सजाने क्या आप देख रहे हैं: लेख "उदाहरण के लिए, लिस्टिंग में होम नियंत्रक से http://www.asp.net/mvc/tutorials/authenticating-users-with-windows-authentication-cs

1 इंडेक्स(), कंपनीसेक्रेट्स(), और स्टीफनसेक्रेट्स() नामक तीन कार्यों का खुलासा करता है। कोई भी इंडेक्स() एक्शन का आह्वान कर सकता है। हालांकि, विंडोज स्थानीय प्रबंधक समूह के सदस्य ही कंपनीसेक्रेट्स() एक्शन का आह्वान कर सकते हैं। अंत में, केवल विंडोज स्टीफन नामक डोमेन उपयोगकर्ता (रेडमंड डोमेन में) स्टीफनसेक्रेट्स() एक्शन का आह्वान कर सकता है। "

0

हाँ आप एक सरल खाता नियंत्रक आप केवल अधिकृत उपयोगकर्ताओं कार्रवाई ChangePassword

[Authorize] 
    public ActionResult ChangePassword() 
    { 
     // your code here 
    } 
8

हमारे पास कुछ ऐप्स हैं जिन्हें इस सटीक चीज़ को करने की आवश्यकता है। अक्सर हमारी क्षुधा web.config में से लॉक:

<authentication mode="Windows"/> 
<authorization> 
    <allow roles="DOMAIN\GroupNameHere"/> 
    <deny users="?"/> 
</authorization> 
<location path="ApiControllerName"> 
    <system.web> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
    </system.web> 
</location> 

हालांकि, अगर आप अभी भी उस एपीआई नियंत्रक के लिए Windows प्रमाणीकरण को बंद करना है।

<location path="Default Web Site/ApplicationName/ApiControllerName"> 
    <system.webServer> 
     <security> 
      <authentication> 
       <anonymousAuthentication enabled="true" /> 
       <windowsAuthentication enabled="false" /> 
      </authentication> 
     </security> 
    </system.webServer> 
</location> 

यह PowerShell स्क्रिप्ट यह तुम्हारे लिए क्या करेंगे:: आप संपादन आईआईएस सर्वर पर applicationHost.config फ़ाइल और जोड़ कर ऐसा कर सकते हैं

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration") 

$applicationLocationPath = "Default Web Site/ApplicationName/ApiControllerName" 

$oIIS = new-object Microsoft.Web.Administration.ServerManager 
$oGlobalConfig = $oIIS.GetApplicationHostConfiguration() 

$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/anonymousAuthentication", $applicationLocationPath) 
$oSection.SetAttributeValue("enabled", "True") 
$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/windowsAuthentication", $applicationLocationPath) 
$oSection.SetAttributeValue("enabled", "False") 

$oIIS.CommitChanges() 
+1

आप, महोदय, मेरी जिंदगी बचाई! – 130nk3r5

संबंधित मुद्दे

 संबंधित मुद्दे