ASP.NET应用程序中的登录页面,其中FormsAuthentication访问被拒绝

时间:2017-11-13 17:21:32

标签: c# asp.net

我有一个需要用户登录的webapp运行。 Webconfig:

    if (checkCredentials.searchCredentials(attemptedName, passwordBox.Text) != null)
            {
                FormsAuthentication.RedirectFromLoginPage(attemptedName,false);
            }

在login.aspx页面中(加倍检查名称)在使用我自己的数据库验证用户凭据后,我有以下逻辑:

<style type="text/css">
html, body{
    width: 100%;
    height: 100%;
}

.Movable{
    height: 100px;
    position: absolute;
    width: 100px;
}

.black{
    background-color: black;
}

.gray{
    background-color: gray;
}

.wheat{
    background-color: lightgray;
}

我知道if语句有效,就像我之前用于登录的方法一样。

但是,当我运行应用程序时,登录页面会立即打开,并显示错误401.2。非常感谢帮助:)

2 个答案:

答案 0 :(得分:5)

我发布了另一个答案,因为它处理了使用Visual Studio 2017和表单身份验证的典型问题,并且是我之前回答的替代方法。

Visual Studio 2017将自动将名为Microsoft.AspNet.FriendlyUrls的NuGet包添加到您的网站或Web应用程序项目中。由于这个包,表单身份验证将无法工作,甚至登录页面也不会呈现多次。

  • 我之前的回答中解释的解决方案是删除它 打包或注释global.asax中Application_Start事件中的行 那说RouteConfig.RegisterRoutes(RouteTable.Routes);。如果您使用此方法,您的网站将失去friendlyUrls的好处。
  • 但是,下面两个不同的配置中提到了第三种解决方案;你可以使用它们中的任何一个。

    • CONFIGURATION 1从login和defaultUrl中删除了aspx扩展名 值。

    • CONFIGURATION 2保留了aspx扩展,但增加了特殊访问权限 对应于login.aspx的freindlyurl的权限。

    (访问权限中的?表示所有未经身份验证的用户,*表示所有用户,即经过身份验证的+未经身份验证的用户)

注意:我已经尝试并测试了这个解决方案。

使用友好网址时的表单身份验证配置配置1

<authentication mode="Forms">
<forms loginUrl="login" defaultUrl="home" 
   slidingExpiration="true" timeout="20" name=".Auth" protection="All">
</forms>
</authentication>

使用友好网址时表单身份验证配置的配置2

<system.web>
<!--keep the aspx extensions for login and default pages-->
<authentication mode="Forms">
    <forms loginUrl="login.aspx" defaultUrl="home.aspx" 
       slidingExpiration="true" timeout="20" name=".Auth" protection="All">
    </forms>
    </authentication>
</system.web>

<!-- add access permissions for friendly url corresponding to login.aspx-->
<location path="login">
        <system.web>
            <authorization>
                <allow users="?" />
                <deny users="*" />
            </authorization>
        </system.web>
    </location>
</configuration>

答案 1 :(得分:1)

由于您使用的是Visual Studio 2017,因此首先需要检查的是Microsoft.AspNet.FriendlyUrls package是否包含在内。完成以下步骤。

  • 评论Global.asax中的那句话 RouteConfig.RegisterRoutes(RouteTable.Routes);并立即尝试您的信息页。但是,请确保在浏览器中清除缓存,否则此URL的旧缓存版本将显示401.2错误。
  • 如果你仍然看到一些问题,那么只需删除上面的包 在解决方案资源管理器中选择Solution节点,然后转到Tools =&GT; NuGet包管理器=&gt;管理解决方案包;检入此软件包的已安装列表,选择它并选择解决方案 右侧的复选框,然后单击卸载按钮。

以下是您需要确保的其他一些事项。

尝试将网络配置中的表单标记更改为以下内容。根据您的要求更改defaultUrl和timeout的值。

<authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="home.aspx" 
   slidingExpiration="true" timeout="20" name=".Auth" protection="All">
</forms>
</authentication>
<authorization>
  <deny users="?" />
  <allow users="*" />
</authorization>

此外,您的C#代码必须在登录按钮单击事件中;如果它在其他任何地方,那么你也可以看到问题。

允许所有未经身份验证的用户使用Login.aspx。在Web配置文件末尾的</configuration>之前添加此配置。如果该页面位于root的安全文件夹下,则输入Login.aspx的路径(如果它不在Security/login.aaspx之类的根目录中。

 <location path="Login.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
 </location>

转到“控制面板”&gt;打开IIS管理控制台。管理工具&gt; Internet信息服务经理。然后,展开网站节点并选择您正在使用的网站。现在双击右窗格中的身份验证,并确保启用匿名和表单身份验证,并禁用其他选项,如以下屏幕截图所示:Security settings in IIS website