2013-02-26 102 views
14

का उपयोग करता है मैं जो Windows प्रमाणीकरण का उपयोग करता है एक MVC4 वेब अनुप्रयोग है, कि web.config में है मैं
<authentication mode="Windows" /> है और वह ठीक काम करता है और सब कुछ ठीक है।एकल नियंत्रक पर MVC4 में उपयोग बेनामी प्रमाणीकरण जब पूरे आवेदन विंडोज Authenticaion

हालांकि अब मुझे एक नियंत्रक (वास्तव में एक वेब एपीआई नियंत्रक) की आवश्यकता है जिसे किसी तीसरे पक्ष के घटक से गुमनाम रूप से एक्सेस किया जाना चाहिए। समस्या यह है कि हर बार जब मैं इस विधि को आमंत्रित करना चाहता हूं तो यह उपयोगकर्ता प्रमाण-पत्रों का अनुरोध करता है।

मैंने नियंत्रक और विधियों के लिए AllowAnonymous विशेषता डालने की कोशिश की लेकिन यह सफल नहीं था।

[AllowAnonymous] public bool Get(string Called, string Calling, string CallID, int direction)

मैं पर दोनों आईआईएस एक्सप्रेस की जाँच की और बेनामी प्रमाणीकरण और Windows प्रमाणीकरण सक्षम के साथ 8 IIS।

ऐसा लगता है कि विंडोज प्रमाणीकरण किसी अन्य प्रमाणीकरण से पहले है और इसे ओवरराइड नहीं किया जा सकता है।

क्या इसे पूरा करने का कोई तरीका है?

उत्तर

14

इसे अपने वेब.कॉन्फिग में जोड़ें। यहां, मेरे नियंत्रक को "वेबहुक नियंत्रक" नाम दिया गया है।

<location path="Webhook"> 
    <system.web> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
    </system.web> 
</location> 

See this KB article for more info.

संपादित - एरिक नीचे उल्लेख किया है, MVC अनुप्रयोगों में आप web.config <authorization> टैग सुरक्षा के लिए उपयोग नहीं करना चाहिए। इसके बजाय, [Authorize] विशेषताओं का उपयोग करें। ऐसा करने से आपके [AllowAnonymous] गुण सही तरीके से काम करने की अनुमति देंगे। ,

<authorization> 
    <deny users="?" /> 
</authorization> 

समाधान एक्सप्लोरर में अपनी परियोजना क्लिक करें, फिर: You can read more about this here.

+0

मुझे नहीं लगता कि यह मेरे लिए काम करेंगे है। इस सेटिंग को '<प्रमाणीकरण मोड = "विंडोज" />' द्वारा ओवरराइड किया गया है और वेब साइट को अभी भी उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है ताकि एक्सेस किया जा सके। इसके अलावा मैं एमवीसी का उपयोग कर रहा हूं और web.config में ऐसी कॉन्फ़िगरेशन सेटिंग्स हमेशा रूटिंग के कारण मदद नहीं कर सकती हैं। –

+0

यह मेरे लिए काम करता है। मैं एमवीसी 3 के साथ '<प्रमाणीकरण मोड =" विंडोज़ ">' का उपयोग भी कर रहा हूं। हालांकि मैंने कोई विशेष रूटिंग नियम स्थापित नहीं किया है। आपको स्थान पथ से गड़बड़ करने की आवश्यकता हो सकती है। –

+0

इसे एक दूसरा प्रयास देना - यह काम करता है। ऐसा लगता है कि 'अनुमति दें' विशेषता विंडोज प्रमाणीकरण के साथ पर्याप्त नहीं है और 'स्थान' टैग सबसे अच्छा काम करता है। मुझे इंगित करने के लिए धन्यवाद कि समस्या के लिए सही समाधान क्या हो सकता है! –

3

स्वीकार किए जाते हैं जवाब पुराना हो चुका हो रहा है, इसलिए ...

अपने web.config में, इन पंक्तियों को दूर f4 पर क्लिक करें (या गुण एक्सप्लोरर खोलें)। अनाम प्रमाणीकरण सक्षम करें।

अब आप Authorize और AllowAnonymous विशेषताएँ का उपयोग करने के लिए स्वतंत्र हैं। वे बहुत सरल हैं, Authorize का अर्थ है कि उपयोगकर्ता को कार्रवाई या नियंत्रक तक पहुंचने के लिए अधिकृत होना आवश्यक है, AllowAnonymous का अर्थ विपरीत है। यदि एक अनधिकृत उपयोगकर्ता Authorize विशेषता के साथ नियंत्रक या कार्रवाई तक पहुंचने का प्रयास करता है, तो उसे लॉगिन पृष्ठ पर रीडायरेक्ट कर दिया जाएगा। यदि आप नियंत्रक पर Authorize डालते हैं तो यह AllowAnonymous वाले लोगों को छोड़कर सभी नियंत्रक के कार्यों पर लागू होता है।

0

web.config को here के रूप में चिह्नित नहीं किया जाना चाहिए।

वांछित परिणाम AllowAnonymous और [Authorize] (और शायद कुछ कस्टम प्राधिकरण विशेषता, यदि आवश्यक हो) प्राप्त करने के लिए उपयोग किया जाना चाहिए।

कदम प्रदर्शन किया जा करने के लिए:

  1. सुनिश्चित आईआईएस दोनों बेनामी प्रमाणीकरण और विंडोज प्रमाणीकरण वेब अनुप्रयोग/वेब साइट

  2. सभी नियंत्रकों [Authorize] विशेषता का उपयोग करना चाहिए के लिए कॉन्फ़िगर है। यदि आसानी से एक सामान्य नियंत्रक वर्ग (जैसे बेसकंट्रोलर/बेसएपी कंट्रोलर) से प्राप्त होता है तो इसे आसानी से हासिल किया जा सकता है। उदा .:

    [Authorize] 
    public class BaseController : System.Web.Mvc.Controller 
    { 
    
    } 
    
    
    [Authorize] 
    public class BaseApiController : System.Web.Http.ApiController 
    { 
    
    } 
    
  3. जोड़े [AllowAnonymous] सभी क्रियाओं गुमनाम होना चाहिए रहे हैं करने के लिए विशेषता। उदा .:

    [RoutePrefix("Api/Anonymous")] 
    [Authorize] 
    public class AnonymousController : ApiController 
    { 
        [HttpGet] 
        [Route("GetServiceStatus")] 
        [AllowAnonymous] 
        public string GetServiceStatus() 
        { 
         return "OK"; 
        } 
    }