ASP.NET中身份验证有三种方式,分别是Windows、Forms和Passport,Windows验证基于窗体验证,需要每个页面写上验证身份代码,相对灵活,但操作过于复杂;Passport使用由微软提供的集中身份验证方式,安全性较高,但实现较复杂。最适合中小型项目的就是基于Forms的身份验证,它将所定义的文件和目录集中到一个页面去做验证,将用户的身份发回写到客户端的Cookie,在Cookie未过期的时间段内用户再次访问网站,就会连同身份Cookie发送到服务器端,服务端的授权设置可以根据不同目录不同用户进行控制了。它的权限模型为用户——角色模型,能满足绝大多数应用场景。
这里注意authetication段为配置身份验证方式,loginUrl为默认验证页,直接访问其它页会返回到此页进行身份验证。name属性值为cookie名称。另外它还拥有以下属性:
Protection:设置为 All,以指定窗体身份验证票的保密性和完整性。这导致使用 machineKey 元素上指定的算法对身份验证票证进行加密,并且使用同样是 machineKey 元素上指定的哈希算法进行签名。
使用allow元素存储允许访问的用户和角色,使用deny元素存储拒绝访问的用户和角色。分别使用users、roles和verbs来控制用户、角色及HTTP传输方法。如:
<authorization>
<allow users="user1,user2,user3" roles="admin,submitter" verbs="GET,HEAD,POST,DEBUG" />
<deny users="user4" roles="guest" verbs="" />
</authorization>
表示授权user1,user2,user3访问,不允许user4访问,访问角色权限为admin和submitter,允许行为为GET四种。我们这里使用user="?"代表所有用户。
建立login.aspx,页面布局如下: