You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.8下ASP.NET WebForms Forms身份验证无法正常实现求助

解决ASP.NET WebForms .NET 4.8 Forms身份验证配置问题

当前你的web.config全局授权规则设置为<deny users="*"/>,这会拒绝**所有用户(包括匿名用户)**访问所有页面,自然也会拦截登录页logon.aspx,导致无法进入登录流程。要实现「仅允许匿名访问登录页,其他页面需认证」的效果,需要添加<location>节点单独配置登录页的授权规则。

修改后的web.config配置

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.8" />
    <httpRuntime targetFramework="4.8" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization" />
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
      </controls>
    </pages>
    <caching>
      
    </caching>
    <authentication mode="Forms">
      <forms loginUrl="logon.aspx" defaultUrl="Default.aspx" />
    </authentication>

    <authorization>
      <deny users="?"/> <!-- 拒绝匿名用户访问全局页面 -->
    </authorization>
    
  </system.web>

  <!-- 单独配置登录页允许匿名访问 -->
  <location path="logon.aspx">
    <system.web>
      <authorization>
        <allow users="*"/> <!-- 允许所有用户(包括匿名)访问此页面 -->
      </authorization>
    </system.web>
  </location>
</configuration>

关键修改说明

  1. 将全局授权的<deny users="*"/>改为<deny users="?"/>:?代表匿名用户,这样全局规则就变成「拒绝匿名用户,允许已认证用户」,更符合你的需求逻辑。
  2. 添加<location path="logon.aspx">节点:针对登录页单独设置授权规则,允许所有用户(包括匿名)访问,确保用户能进入登录页面完成认证流程。

额外注意事项

  • 确认logon.aspx的路径是否正确:如果登录页在子目录中,path属性需要填写相对根目录的完整路径,比如path="Account/logon.aspx"。
  • 检查是否存在其他<location>节点:如果有其他针对页面或目录的授权规则,可能会和当前配置冲突,需要确保规则逻辑一致。

内容的提问来源于stack exchange,提问作者Shaharukh Pathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:56:05