启用Forms身份验证
相信大家对很清楚如何启用 Forms验证,但是这里我还是罗嗦一下。我们只要在 web.config文件中配置如下就行了:
<authentication mode="Forms"/>
这样之后,ASP.NET运行时就知道我们启用了Forms验证,在生命周期的验证阶段就激活FormsAuthenticationModule模块。还有一点要特别注意:<authentication/>元素节点只能在应用程序的根文件夹中的 web.config中配置。如果在子文件夹中使用这个节点就会报错。这也说明了每个应用程序只能定义一个身份验证类型。
而且在<authentication/>节点中,我们还可以进行更多的设置。如下:
<authentication mode="Forms ">
<forms name="MyCookie"
loginUrl="Login.aspx"
timeout="60"
path="/"
protection="All">
</forms>
</authentication>
我们下面就看看<forms>节点中的属性的含义和用途:
name:定义身份验证cookie的名称。因为我们把身份验证的票据是存放在cookie中的,而且我们必须给身份验证cookie取具有唯一性的名称,防止和其他的应用程序中的cookie冲突。
loginUrl:从英文名字就可以知道是关于登录的。实际上就是标明把用户重定向到哪个页面取登录。
timeout:设置身份验证cookie持续的时间,以分钟为单位的。而且这个时间是一个相对的时间,就是说每次对用户进行验证时,cookie的期限就会被重新设置。如果在60分钟内用户再没有向服务器发起请求,那么cookie就过期,之后如果用户再次发起请求,那么就要重新输入用户名和密码等信息。
path:设置cookie的保存的路径,一般是设置为"/",我们不要轻易的改变。
我们之前也说过,我们的身份验证的票据是加密以后再存放如cookie中的,然后再把cookie发送到客户端。当客户端再次请求的时候,再服务器端就会解析客户端发送来的cookie信息,我们必须要确认:客户端发送来的cookie信息就是我们之前从服务器端发送过去的,也就是说,我们要判断,我们的 cookie在客户端是否被篡改了。
所以,这就是<forms/>中属性protection的用途。protection的值有四个:
Encryption:对cookie的内容信息进行加密。
Validation:向cookie中的内容添加MAC(消息验证代码),以便服务器判断cookie是否被篡改了。
None:禁用加密和篡改检查
All:同时启用加密和篡改检查。
默认情况下是"All",因为它可以把数据加密放入cookie中,而且对返回到服务器端的cookie进行验证。
用户信息的存储
我们一般把用户的信息,如用户名和密码存放在数据库中。如之前一篇文章说的,我们也可以把用户的用户名和密码信息直接放在web.config文件中。 Forms验证其实对把用户凭证信息放在哪里提供了很大的灵活性。默认情况下是放在web.config中的。如下代码:
<authentication mode="Forms ">
<forms name="MyCookie"
loginUrl="Login.aspx"
timeout="60"
path="/"
protection="All">
<credentials>
<user name="xiaoyang" password="xiaoyang"/>
<user name="panyan" password="panyan"/>
</credentials>
</forms>
</authentication>
见上面的 <credentials>节点,就是我们存放的用户信息。上面的信息是以明文(没有加密)的形式存放。我们也采用加密的方式存放,只要配置如下:<credentials passwordFormat="MD5">,配置 passwordFormat的加密方式就行了。那么用户在传输之前就会被加密。
还有就是把用户信息存储在数据库中,我们后面会讲述的,也是最常用的方式。
web.config配置的一些用法
1.在web.config中添加用户凭证
我们之前说过了,ASP.NET的身份验证中,对于如何存储用户凭证提供了很大的灵活性。默认情况下是把凭证存储在web.config中的。
我们还是来看看之前配置的一些节点信息:
<authentication mode="Forms ">
<forms name="MyCookie"
loginUrl="Login.aspx"
timeout="60"
path="/"
protection="All">
<credentials>
<user name="xiaoyang" password="xiaoyang"/>
<user name="panyan" password="panyan"/>
</credentials
</forms>
</authentication>
在<credentials>中就是我们存储的用户的一些信息。不知道大家是否还记得我们之前已经说过了的Authenticate方法:只有把用户信息存放在了配置文件中,我们才可以使用这个方法,代码如下(判断提交的用户信息是否合法):
bool IsAuthenticate= FormsAuthentication.Authenticate(userName, userPassword);