我正在为 ASP.NET Web 应用程序开发 .NET,并试图拒绝所有未经授权的用户访问我的应用程序,但只允许他们访问登录页面。
以下是我的 system.web 部分中的代码片段:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="60" name="APPNAME" slidingExpiration="true" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
我也有这个外部允许访问登录页面:
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
但是,当我没有登录时,我仍然可以访问页面,我该如何阻止这种情况发生?
我什至在 Main 文件夹中添加了一个 Web.Config 文件,该文件夹存储了大部分网站文件,其内容是:
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
但这仍然没有任何效果。
解决方案
我遵循了一些针对 asp.net (http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx) 的优化技巧,并删除了我真正需要的 AnonymousIdentification httpModule。
最佳答案
我想您会发现,如果您将具有不同预期角色的不同网页放在不同的文件夹中,则处理 ASP.NET 授权要容易得多。这不是一个要求。只是更容易管理。
如果您使用的是 VS 2010(我不确定这是不是在速成版中),请尝试使用项目菜单底部的 ASP.NET 配置工具。
我发现首先使用该工具很容易了解 web.config 文件的工作原理,对安全性进行一些更改,然后查看它的作用。
如果您只是从 VS 2010 中的空白 ASP.NET 应用程序开始,您可以通过进行两项更改来锁定除登录和注册页面之外的所有内容:
在根 web.config 中
<system.web>
<authorization>
<deny users="?" />
</authorization>
在帐户子文件夹的 web.config 中
<?xml version="1.0"?>
<configuration>
<location path="Register.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</configuration>
您会看到用户立即被定向到登录页面,但他们仍然可以注册。
关于.net - web.config 授权拒绝未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874357/