ASP.Net身份验证是从用户获取名称和密码等标识凭证并根据某些机构验证这些凭据的过程。如果凭据有效,则提交该凭据的实体被视为通过身份验证的标识。一旦标识通过了身份验证,则身份验证过程会确定该标识是否可以访问给定的资源。
Windows验证:
IIS和服务器的账户管理功能之间验证客户端用户并发送票据;
如果应用程序使用 Active Directory 用户存储,则应该使用集成 Windows 身份验证。
优点:不用再设计登录页面,不用编写登录验证逻辑。而且使用Windows身份认证会有更好的安全保障。
过程:
有五种类型的Windows身份验证:
1、基本身份验证(Basic authentication);
2、摘要式身份验证(Digest authentication);
3、集成Windows身份验证(Integrated Windows authentication);
4、IIS的客户证书映射验证(IIS Client Certificate Mapping authentication);
5、活动目录的客户证书映射验证(Active Directory Client Certificate Mapping authentication)。
如果不止一种身份验证类型被启用,比方说它们都被勾选中,那么IIS会首先尝试证书映射(Certificate Mapping),然后是集成Windows身份验证。如果验证失败,那么会接着尝试摘要式身份验证。最后,如果其他所有验证都失败,就会使用基本身份验证。换句话说,系统会首先尝试最安全的验证选项,然后逐级向低安全级别的验证选项过渡。
Forms验证:
基于表单或者窗体的验证,使用Cookie(客户端本地存储);
在HttpApplication(定义ASP.NET应用程序中的所有应用程序对象通用的方法、属性和事件)处理管道的页面处理流程中完成;在页面处理流程的PageLoad和PageLoadComplete事件之间执行的控件的Click事件中完成验证客户端的工作并发送票据的。
通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了。
Forms标记属性:
name指的是客户端本地存储的Cookie的名字
loginUrl指的是当你身份不合法的时候你需要转向它去登陆。
protection指的是它正常来说有加密、传输验证、none,如果是none的话就是正常显示,如果有加密的话就是本地存储;一般都是用All,既在传输时验证,又在本地验证;就是存储的时候也要加密,然后传输的过程中还要验证,防止Cookie被篡改。
大概流程:
注意:在IIS中修改身份验证方法;
使用系统默认的Forms验证方式, 一定要自定义登陆窗体(页面). 因为默认的登录窗体名称为Login.aspx, 此名称可以在配置文件的forms元素中进行配置, 但是Asp.net网站会根据Login.aspx创建Login的类型, 而.Net类库System.Web.UI.WebControls中也有一个名称为Login的控件类型, 这样便会引起冲突, 因此一定要为Login.aspx登陆页面自定义一个命名空间以避免冲突。
Passport验证:
用户登录了passport账户就可以直接访问操作系统、邮件、MSN等程序而不需要再进行身份验证操作。
None验证:不验证
参考:http://dev.yesky.com/msdn/39/7595039.shtml
http://www.cnblogs.com/fish-li/archive/2012/05/07/2486840.html
http://blog.youkuaiyun.com/gaoying_blogs/article/details/17250869#comments
有不对的地方欢迎大家交流(*^__^*) thanks for your time guys