ASP.NET网站开发——成员资格(安全模式)
安全的必要性
- 构造特殊的链接地址,导致文件内的数据泄露
- 数据库泄露
- 安全防范的首要范畴:所有的HTTP访问都要经过IIS,所以限制IIS的安全性是关键
asp.net的安全模式
简介:根据所请求的资源类型,IIS能够自己处理请求,也可以不自己处理请求。如果资源请求一个ASPX页面,则IIS将请求经过身份验证用户(或者匿名用户)的安全令牌一起传递给ASP.NET。接下来的事情就取决于ASP.NET配置。
- 根据锁请求资源的类型,IIS能够自己处理请求,也可以不自己处理请求
- 如果资源请求一个ASP页面,则IIS经请求经过身份验证用户(或者匿名用户)的安全令牌一起传递给ASP.NET,接下来发生的事情就取决于asp.net的配置。
ASP.NET支持4种授权方法:
- Windows:IIS验证,对于内联网环境非常有用
- Passport:微软集中式身份验证,一次登录便可访问所有成员站点,需要收费
- Form:窗体验证,验证账号/密码,Web最佳最流行的验证方式
- None:表示ASP.NET自己不执行验证方式,完全依赖IIS身份验证
认证和授权机制
认证是确认用户身份的过程,在用户通过了身份验证后,开发人员就可以确定该用户是否有权继续操作。如果没有进行身份验证,就不能进行实体授权。
授权是确定已验证的用户是否有权访问应用程序中的某个部分、某个点或只访问应用程序提供的特定数据集。
基于窗体身份授权模式
允许用户访问整个应用程序或其特定资源的一种流行模式
IIS接收请求,但不进行处理,而传递给
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="login.aspx" defaultUrl="Index.aspx">
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<authorization>节指示用户定义的登录窗体URL,ASP.NET仅向<authorization>节被显示拒绝访问的用户显示该窗体。deny表示验证阻止匿名用户,allow表示允许访问用户,符号“?”表示任何匿名未经身份验证的用户。如果请求者未通过验证就执行<authorization>元素中的内容。Mode属性的值设值为Form,表示Web应用程序使用基于窗体的身份验证。loginUrl表示未验证用户跳转的页面,defaultUrl表示验证成功默认跳转的页面。path保存cookie的位置。该cookie用于储存授权用户的访问令牌,多数情况默认值为“/”。
下图为用户身份验证流程
下图为<Form>元素主要属性
密码进行加密
我们可以将用户名和密码保存在Web.config文件中,用来检查用户名和密码是否来自授权用户。Web.config文件文件的<forms>子元素还可以有子元素。子元素<credentials>允许直接在Web.config中指定用户名和密码组合。
<credentials>元素在配置文件中添加了用户及其密码。<credentials>有一个属性passwordFormat,其值可以是Clear、MD5和SHAI。
密码加密方式有三种
Clear:密码储存明文。用户的密码直接与这个值比较,不需要进一步转换。
MD5:密码使用散列摘要进行存储。在验证证书时,用户密码使用MD5算法进行散列,在与这个值进行相等比较。不会存储或比较明文密码。这个算法比SHAI的性能好
SHA1:密码使用SHA1散列摘要来存储。在验证证书时,用户密码使用SHA1算法进行散列,再与这个值进行相等比较。这个算法的安全性最高。
下面的例子获取了用户输入的密码然后将其以MD5加密形式输出出来:
Form验证总结
1 假设用户请求保护的页面为Default.aspx
2 HTTP模块调用Form验证服务截取来自用户的请求,并检查其中是否包含用户凭证
3 如果没有发出任何用户凭据,将自动转向用户登录页面Login.aspx
4 原请求页面地址Default.aspx将以ReturnUrl值的形式附加在登录页面Login.aspx的Url地址后。当用户通过验证,程序将根据ReturnUrl值进行页面重新定向,以便访问Default.aspx。
设置访问权限
使用<location>配置节,可以指定特定的文件或目录进行特别访问权限:
如有不足,请批评指正,谢谢