Mal*_*chi 3 .net asp.net authorization .net-4.0
我正在开发.NET for ASP.NET Web应用程序,并试图拒绝所有未经授权的用户访问我的应用程序,但只允许他们访问登录页面.
下面是我的system.web部分中的代码片段:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="60" name="APPNAME" slidingExpiration="true" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
我也在外面允许访问登录页面:
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
但是,当我没有登录时,我仍然可以访问页面,我怎么能阻止这种情况发生?
我甚至在Main文件夹中添加了一个Web.Config文件,该文件夹存储了大部分网站文件,其内容是:
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但这仍然没有任何效果.
解
我已经关注了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>
Run Code Online (Sandbox Code Playgroud)
在Account子文件夹中的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>
Run Code Online (Sandbox Code Playgroud)
您将看到的是,用户立即被定向到登录页面,但他们仍然可以注册.