简体   繁体   English

HTTP错误401.0 - 未经授权的IIS 8

[英]HTTP Error 401.0 - Unauthorized IIS 8

Working on a MVC5 project, I have access to the account / login page. 在MVC5项目上工作,我可以访问帐户/登录页面。 When I enter wrong credentials it tells me that the username / password is incorrect. 当我输入错误的凭据时,它告诉我用户名/密码不正确。 When I enter the right credentials it redirects me to home/index so I assume the login did work. 当我输入正确的凭据时,它会将我重定向到home / index,因此我认为登录确实有效。

How ever upon getting to the new page I get the following error. 到达新页面时,我得到以下错误。 HTTP Error 401.0 - Unauthorized. HTTP错误401.0 - 未经授权。

Ant i'm not sure how I would go on and solve this. 蚂蚁我不知道如何继续解决这个问题。

My Login Controller 我的登录控制器

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);
}

And my 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);
    }

And last my web.config: 最后我的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>

The connection string is not empty, but I did remove it I do not want it posted public. 连接字符串不是空的,但我确实删除了它我不希望它公开发布。

I've had a simular issue and it were nothing with the code, something did happen with my iis and I had to reinstall it. 我有一个类似的问题,它与代码无关,我的iis发生了一些事情,我不得不重新安装它。 The key thing here is to make sure you uninstall the Windows Process Activation Service or otherwise your ApplicationHost.config will be still around. 这里的关键是确保您卸载Windows进程激活服务,否则您的ApplicationHost.config仍将存在。

I have noticed that you use FormsService in your Login Controller. 我注意到您在Login Controller中使用FormsService I think that this class is SharePoint-specific. 我认为这个类是特定于SharePoint的。 I would recommend using WebSecurity.Login() or FormsAuthentication.Authenticate() instead. 我建议使用WebSecurity.Login()FormsAuthentication.Authenticate()代替。

Have you checked that your Startup.cs has configured the application correctly? 您是否检查过您的Startup.cs是否正确配置了应用程序?

There should be something similar to the following in there: 那里应该有类似的东西:

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))
                }
            });

Sounds like a IIS permission issue, you should try running VS as administrator if you have not already. 听起来像是IIS权限问题,如果你还没有,你应该尝试以管理员身份运行VS.

" HTTP Error 401.0 - Unauthorized You do not have permission to view this directory or page." “HTTP错误401.0 - 未经授权您无权查看此目录或页面。”

Diagnose 401.x HTTP errors on IIS 在IIS上诊断401.x HTTP错误

Try to make sure permissions are correct for the folders. 尝试确保文件夹的权限正确。 Double-click the Authentication feature in IIS. 双击IIS中的身份验证功能。 Right-click the "Anonymous Authentication" provider and select edit. 右键单击"Anonymous Authentication"提供程序,然后选择编辑。 Now, right-click the web application in the left pane, select Edit Permissions..., select the Security tab, click Edit -> Add and add IIS APPPOOL\\NameOfAppPool . 现在,右键单击左窗格中的Web应用程序,选择Edit Permissions ...,选择Security选项卡,单击Edit - > Add并添加IIS APPPOOL\\NameOfAppPool Make sure the Application Pool Identity has read and execute permissions of the folder. 确保应用程序池标识具有该文件夹的读取和执行权限。

Here are a few links. 这里有一些链接。

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

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM