2015-06-25 8 views
7

एक एमवीसी 5 परियोजना पर काम करना, मेरे पास खाता/लॉगिन पृष्ठ तक पहुंच है। जब मैं गलत प्रमाण-पत्र दर्ज करता हूं तो यह मुझे बताता है कि उपयोगकर्ता नाम/पासवर्ड गलत है। जब मैं सही प्रमाण-पत्र दर्ज करता हूं तो यह मुझे घर/सूचकांक पर रीडायरेक्ट करता है, इसलिए मुझे लगता है कि लॉगिन काम करता है।HTTP त्रुटि 401.0 - अनधिकृत आईआईएस 8

नए पेज पर जाने पर मुझे निम्न त्रुटि मिलती है। HTTP त्रुटि 401.0 - अनधिकृत।

चींटी मुझे यकीन नहीं है कि मैं कैसे चलूँगा और इसे हल करूँगा।

मेरा प्रवेश नियंत्रक

public ActionResult LogIn() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult LogIn(LogOnModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     if (MembershipService.ValidateUser(model.UserName, model.Password)) 
     { 
      FormsService.SignIn(model.UserName, model.RememberMe); 
      if (!String.IsNullOrEmpty(returnUrl)) 
      { 
       return Redirect(returnUrl); 
      } 
      else 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
     } 
     else 
     { 
      ModelState.AddModelError("", "The user name or password provided is incorrect."); 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

और मेरे मॉडल

public class LogOnModel { 
    [Required] 
    [DisplayName("User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [DisplayName("Password")] 
    public string Password { get; set; } 

    [DisplayName("Remember me?")] 
    public bool RememberMe { get; set; } 
} 

public interface IFormsAuthenticationService { 
    void SignIn(string userName, bool createPersistentCookie); 
    void SignOut(); 
} 

public class FormsAuthenticationService : IFormsAuthenticationService { 
    public void SignIn(string userName, bool createPersistentCookie) { 
     if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName"); 

     FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 
    } 

और मेरे web.config पिछले:

<?xml version="1.0"?> 
<configuration> 
    <connectionStrings> 
    <add name="SaleswebEntities" connectionString= 
    </connectionStrings> 
    <system.web>   
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
     <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </assemblies> 
    </compilation> 

    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" /> 
    </authentication> 

    <membership> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
     </providers> 
    </membership> 

    <profile> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
     </providers> 
    </profile> 

    <roleManager enabled="false"> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
     <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
     </providers> 
    </roleManager> 

    <pages> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    </system.web> 

    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    </system.webServer> 

    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

    <appSettings> 
    <add key="ClientValidationEnabled" value="false" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="false" /> 
    </appSettings> 
</configuration> 

कनेक्शन स्ट्रिंग खाली नहीं है, लेकिन मैं इसे निकाल दिया मैं नहीं चाहता कि यह सार्वजनिक पोस्ट हो।

+0

कृपया अपना कोड एक्शन और कंट्रोलर से दिखाएं।तथ्य यह है कि आपको रीडायरेक्ट किया गया है इसका मतलब यह नहीं है कि आप प्रमाणित हैं। – Kamo

+0

@ kamo इसके लिए खेद है, मेरी पोस्ट अपडेट की गई। –

+0

आपकी 'FormsService.SignIn()' विधि क्या करती है? – Kamo

उत्तर

2

मैं एक simular समस्या हुई है और यह कोड के साथ कुछ भी नहीं थे, कुछ मेरी आईआईएस के साथ हुआ है और मैं इसे फिर से स्थापित करने के लिए किया था। यहां महत्वपूर्ण बात यह सुनिश्चित करने के लिए है कि आप Windows प्रक्रिया सक्रियण सेवा को अनइंस्टॉल करें या अन्यथा आपका ApplicationHost.config अभी भी आसपास रहेगा।

0

मैंने देखा है कि आप अपने लॉगिन नियंत्रक में FormsService का उपयोग करते हैं। मुझे लगता है कि यह वर्ग SharePoint- विशिष्ट है। मैं इसके बजाय WebSecurity.Login() या FormsAuthentication.Authenticate() का उपयोग करने की अनुशंसा करता हूं।

+0

क्या यह नहीं है कि @ जॉकीम कार्ल्सन की सेवा 'IFormsAuthenticationService' में परिभाषित की गई है? – jolySoft

+0

वह भी है। अच्छी बात। :) –

0

क्या आपने जांच की है कि आपके Startup.cs ने एप्लिकेशन को सही तरीके से कॉन्फ़िगर किया है?

app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Account/Login"), 
       Provider = new CookieAuthenticationProvider 
       { 
        // Enables the application to validate the security stamp when the user logs in. 
        // This is a security feature which is used when you change a password or add an external login to your account. 
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
         validateInterval: TimeSpan.FromMinutes(30), 
         regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
       } 
      }); 
0

एक IIS अनुमति मुद्दे की तरह लगता है, तो आप वी.एस. व्यवस्थापक के रूप में चल रहा है, तो आप पहले से ही नहीं है की कोशिश करनी चाहिए:

वहाँ में निम्न जैसा कुछ भी नहीं होना चाहिए।

"HTTP त्रुटि 401.0 - अनधिकृत आपको इस निर्देशिका या पृष्ठ को देखने की अनुमति नहीं है।"

Diagnose 401.x HTTP errors on IIS

कोशिश यकीन है कि अनुमतियों फ़ोल्डरों के लिए सही हैं। आईआईएस में प्रमाणीकरण सुविधा को डबल-क्लिक करें। "Anonymous Authentication" प्रदाता राइट-क्लिक करें और संपादित करें का चयन करें। अब, बाएं फलक में वेब एप्लिकेशन पर राइट-क्लिक करें, अनुमतियां संपादित करें का चयन करें ..., सुरक्षा टैब का चयन करें, संपादित करें -> जोड़ें और IIS APPPOOL\NameOfAppPool जोड़ें पर क्लिक करें। सुनिश्चित करें कि एप्लिकेशन पूल पहचान ने फ़ोल्डर की अनुमतियां पढ़ और निष्पादित की हैं।

यहां कुछ लिंक दिए गए हैं।

Configuring IIS (Windows 7) for ASP.NET/ASP.NET MVC 3

http://patrickdesjardins.com/blog/asp-net-mvc-http-error-401-0-unauthorized

https://serverfault.com/questions/348049/iis-and-http-401-0-unauthorized

+0

हाय रिच, स्टैक ओवरफ़्लो में आपका स्वागत है! मैंने आपके सबसे हालिया जोड़े को वापस ले लिया है, क्योंकि ऐसा लगता है कि यह किसी अन्य संसाधन से कॉपी-पेस्ट से थोड़ा अधिक है। इसके बजाए, हम विशेष प्रश्न के अनुरूप होने के उत्तर पसंद करते हैं। ध्यान दें कि इसका वर्तमान रूप में उत्तर पूरी तरह से ठीक है; आपके पास एक +1 है! – Matt

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