ASP.NET安全认证

ASP.NET的安全认证共有四种模式:Windows、Form、Passport、None。Windows和None起不到对程序安全保护的作用,因此不推荐使用,推荐使用Form认证。

在我们新建了一个Web项目后,项目中会存在一个Web.Config文件(如果没有可以自己添加一个),默认的的认证模式为Windows,我们需要修改为Form认证,首先打开Web.Config文件,修改方法如下:

<authentication mode="Windows" /> 把它改成:

<authentication mode="Forms">

    <forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH"></forms>

</authentication>

还有一个地方需要修改,修改方法如下:

<authorization>

     <allow users="*" />

</authorization>

换成:

<authorization>

    <deny users="?"></deny>

</authorization> 

 

注意:请注意<authentication><authorization>,很容易写错。

那么上面所做的修改是什么意思呢?这里主要是对注册用户的验证操作,也就是说我们只希望系统中注册的用户才可以使用系统或其中的功能,那么我们就来解释一下上面这段代码的作用。

“allow”是允许的意思,“*”表示所有用户,也就是说<allow users="*" />是表示允许所有的用户使用该系统。“deny”是拒绝的意思,“?”表示匿名用户,也就是说拒绝匿名访问。

首先,在项目中新增一个用于用户登录的页面(Longin.aspx),然后将原来的default.aspx页面设置成起始页,运行项目,你会发现我们进入的任然是用户登录界面,而且在浏览器的地址栏中出现这样的代码:http://localhost:2027/BookManageTest/Login.aspx?ReturnUrl=%2fBookManageTest%2fdefault.aspx,也就是说我们需要首先登录才能看到default.aspx页面,上面的设置起这个作用的。

那么还有一种情况,就是项目中会有一些允许任何用户(包括匿名访问的)浏览的内容,还有一些只允许系统管理员浏览的内容,那么这些又是怎么实现的呢?这时要用到多个Web.Config文件来实现该功能。首先介绍一下Web.Config文件的作用范围。Web.Config的设置作用于其做在目录的所有文件夹及其子目录下的所有文件,而子目录下的Web.Config设置将覆盖由父目录继承下来的设置。

那么我们在项目里分别建两个文件夹,一个是所有用户都可以浏览的内容(Everyone),一个是只有管理员可以浏览的(Manegement),把相应的文件放到对应目录里,然后在每个文件夹里添加一个Web.Config文件。

在Everyone文件夹里的Web.Config文件里添加如下的代码:

<?xmlversion="1.0"encoding="utf-8"?>

    <configuration>

        <system.web>

            <authorization>

                <allow users="*"/>

            </authorization>

        </system.web>

    </configuration>

该设置将覆盖跟目录中的设置,也就是该目录中的文件允许所有用户访问,包括匿名访问。

在Management文件夹里的Web.Config文件里添加如下的代码:

<?xmlversion="1.0"encoding="utf-8"?>

<configuration>

    <system.web>

        <authorization>

            <allow users="Admin"/>

            <deny users="*"/>

        </authorization>

    </system.web>

</configuration>

 

<allow users="Admin"/><deny users="*"/>表示该文件夹中的文件只允许“Admin”访问,拒绝其他所有的用户。

那么怎么知道登录的是“Admin”呢?在登录时我们需要首先设置Cookie的信息:

System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false);

//通过验证,发放Cookie

其中的第一个参数就是我们要用到的用户名称的信息。

 

现在我们的项目里已经有三个Web.Config文件了,以后还会更多,如果每个文件单独维护,那么会很麻烦,所以要有一种集中管理这些文件的方法。要集中管理Web.Config文件就要用到<>节点与path属性。我们将Everyone和Management文件夹中的Web.Config文件的设置放在项目目录下的Web.Config文件里,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<configuration>

    <location path="Everyone">

        <system.web>

        <authorization>

            <allow users="*"/>

        </authorization>

        </system.web>

    </location>

    <location path="Management">

        <system.web>

        <authorization>

            <allow users="Admin"/>

            <deny users="*"/>

        </authorization>

        </system.web>

    </location>

    <system.web>

    <!--这里放置原来根目录Web.config的内容-->

    </system.web>

</configuration>

注意:<location>节点的是<configuration>的一个子节点,它与原有的<system.web>属于并列关系。

大家可能注意到了,ASP.NET安全认证只对.aspx、.ascx等ASP.NET文件起作用,对于普通的文件却不起作用,如.html、.js等文件。我们也可以通过设置来保护我们想要保护的文件。

1、打开Internet信息服务(IIS)管理器,鼠标右击本项目的虚拟目录,选择属性,点击“配置”按妞。

2、然后双击扩展名为.aspx的项目,复制“可执行文件”的路径,点击“取消”按妞返回,再点击“添加”按妞,粘贴复制的内容,填写你要保护的文件后缀名,如.html,然后填写动作限制为“GET,HEAD,POST,DEBUG”,也可选择全部。

3、最后点击“确定”按妞就可以了。

大家可以测试一下我们的设置是否有作用。

 

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG

原文地址:https://www.cnblogs.com/juan/p/1424729.html