.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>
关键修改说明
- 将全局授权的
<deny users="*"/>改为<deny users="?"/>:?代表匿名用户,这样全局规则就变成「拒绝匿名用户,允许已认证用户」,更符合你的需求逻辑。 - 添加
<location path="logon.aspx">节点:针对登录页单独设置授权规则,允许所有用户(包括匿名)访问,确保用户能进入登录页面完成认证流程。
额外注意事项
- 确认
logon.aspx的路径是否正确:如果登录页在子目录中,path属性需要填写相对根目录的完整路径,比如path="Account/logon.aspx"。 - 检查是否存在其他
<location>节点:如果有其他针对页面或目录的授权规则,可能会和当前配置冲突,需要确保规则逻辑一致。
内容的提问来源于stack exchange,提问作者Shaharukh Pathan
相关产品推荐
相关产品推荐

