繁体   English   中英

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

[英]Login Page in ASP.NET application with FormsAuthentication access denied

我有一个正在运行的网络应用程序需要用户登录。 网络配置:

    <!--Logging in stuff-->
    <authentication mode="Forms">
        <forms loginUrl="login.aspx" timeout="2880"/>
    </authentication>
    <authorization>
        <deny users="?"/>
    </authorization>

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

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

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

但是,当我运行该应用程序时,登录页面立即打开并显示错误 401.2。 帮助将不胜感激:)

我正在发布另一个答案,因为这解决了将Visual Studio 2017与表单身份验证结合使用的典型问题,并且是我以前的答案的替代方法。

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

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

    • 配置1从login和defaultUrl中删除aspx扩展名
      值。

    • 配置2保留了aspx扩展名,但为与login.aspx对应的freindlyurl添加了特殊的访问权限。

    (访问权限中的?表示所有未认证的用户, *表示所有用户,即已认证+未认证的用户)

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

使用Friendly Urls时用于表单身份验证配置的配置1

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

使用Friendly Urls时用于表单身份验证配置的配置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>

由于您使用的是Visual Studio 2017,因此您需要检查的第一件事是是否包含Microsoft.AspNet.FriendlyUrls package 请执行以下步骤。

  • 注释Global.asax中的行,该行显示RouteConfig.RegisterRoutes(RouteTable.Routes); 并立即尝试您的页面。 但是,请确保清除浏览器中的缓存,否则此URL的旧缓存版本将出现401.2错误。
  • 如果仍然遇到问题,则只需通过在解决方案资源管理器中选择“解决方案”节点来删除上述软件包,然后转到“工具” =>“ NuGet软件包管理器” =>“管理软件包”以获取解决方案; 选中此软件包的“已安装”列表,选中它,然后选中右侧的解决方案复选框,然后单击“卸载”按钮。

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

尝试将Web配置中的表单标签更改为以下内容。 根据需要更改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>之前添加此配置。 如果它不是像根输入的Login.aspx路径Security/login.aaspx如果页面是根的安全文件夹下。

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

转到“控制面板”>“管理工具”>“ Internet信息服务管理器”,打开IIS管理控制台。 然后,展开“网站”节点并选择您正在使用的网站。 现在,在右窗格中双击“身份验证”,并确保启用了“匿名和表单身份验证”,并且禁用了其他选项,如以下屏幕快照所示: IIS网站中的安全设置

您可以检查您是否有此类条目。 如果是这样,您可以尝试将其删除。

<system.webServer> 
    <modules> 
        <remove name="FormsAuthentication" /> 
    </modules> 
</system.webServer>

以防万一它会帮助某人。

通过从 loginurl 和 defaulturl 中删除 .aspx 为我工作

暂无
暂无

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

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