"验证"与"授权"是对网页资源安全管理的两道门。

验证(Authentication):检查用户是否是合法的用户。就像是网站大门口的保卫,服责验证使用的用户名和密码。

授权(Authorization):检查用户是否有访问某种资源的权限。例如有的人虽然能过了环保局门口保卫的验证,进入环保局,但他可能是一个普通科员,那他就没有局长职责。

验证与授权的底层运作:

首先,打开windows操作系统的“管理工具”->“计算机管理”->“本地用户和组”->“用户”。会看到右侧的窗口中列出了好多的计算机用户,但细心的朋友会发现,你安装完IIS后会多出一个用户“IUSR_***”,这个用户是做什么用的呢?答案是:它是Windows IIS匿名者所使用的授权账号。而“IUSR-***”中的“***”就是您的计算机名。

然后,你再在c:\inetpub\wwwroot(IIS默认的文件夹)文件夹上右击,选择“属性”(NTFS格式),在“组和用户名称”列表中你会看到当前文件夹授权给了“IUSR_***”这个Internet来宾帐户了。这个授权是必须,不要删掉。

最后,在 “Internet信息服务管理器(IIS)”中右击“默认站点”,选择“目录安全性”->“身份验证和访问控制”->“编辑”打开“身份验证对话框”,在“用户名”的文本框中会看到“IUSR_***”这个用户名。

现大家明白了,客户机通过网络来访问你的网站的时候,是借用了“IUSR_***”这个用户来访问你的网站的。而“IUSR_***”这个用户的权限控制是受“NTFS”的ACL进行设置的。所以IIS的身份验证的底层运作的主要控管者是由“NTFS”权限管理系统来实现的。

身份验证:

Asp.net2.0中提供的身份验证模式有三种:

1)      Windows身份验证:通过windows的ACL和IIS配合进行验证的。网站本身没有帐户管理功能,全部委托Windows的安全机制来实现。管理员必须为每一个访问网站的用户分配一个服务器Windows上的账户。这样问题就来了,在Internet环境下你很难让管理员为每一个用户分配一个账号,所以这种验证方式不适用于Internet环境,只适于公司内部的受控环境中。所以在这里我就略去不说了。

2)      Forms身份验证:通过自己的帐户管理系统和IIS配合进行验证,并把验证的身份保存在Cookies中。这种方式适合于Internet环境。

3)      Passport身份验证:此验证方式是通过微软提供的Passport服务进行验证,当然,你需要给微软交不菲的$了。这种验证方式我也就略去不说了。

设置你的网站的验证模式:

1)      依次打开“Internet信息服务管理器(IIS)”-“默认站点”-“属性”-“ASP.NET”-“身份验证”。在“身份验证设置”中的下拉列表中选择你要实现的身份验证方式(这里我们选择Forms)。

2)      将站点开启IIS匿名访问。

3)      创建登录页面(用户名和密码两个文本框和一个登录按钮)

4)      编写“登录”按钮的代码,验证用户名和密码

5)      设置网站登录程序

<authentication mode="Forms">

<forms loginUrl="Users.aspx" name="auth" protection="All" timeout="60" path="/" />

</authentication>

<forms>元素的属性介绍:

name:将来保存Cookie的名称。

loginUrl:网站的登录首面,当未通过身份验证去访问网站某页面时就会被自动转回所指定的页面(Users.aspx)。

protection:Cookie的保存模式,All代表保存时加密,传输中验证。

path:Cookie的保存路径。若path=”/” Cookie保存为administrator@localhost[1].txt,若path=”mygod” Cookie保存为administrator@mygod[1].txt

timeout:Cookie的有效期。单位是分钟

FormsAuthentication类:

RedirectFromLoginPage(string,bool):验证通过后网页转向用户要访问的网页去。

RedirectToLoginPage():将网页转向指定登录页面。

SignOut():移除用户身份验证的信息。

Authenticate(string ,string):对照配置文件中的验证凭据进行验证。返回bool型数据,代表用户是否登录成功。

SetAuthCookie(string,bool):为用户产生一个用户验证票据,并将用户资料记录Cookie。

HashPasswordForStoringInConfigFile(string ,passwordformat):将字符串按照指定的加密方式进行单向加密,返回加密后的字符串。

授权:

Asp.net2.0中的授权分两种:文件授权和URL授权。

文件授权:实际上是通过ACL来进行设置来访用户对网页的访问权限。这种方法对程序开发人员来说太笨拙。这里不多说了。

URL授权:将用户和角色对应至数据库中用户与角色,选择性地允许与拒绝特定用户或角色。

URL授权是由UrlAuthorizationModule来执行的。作为开发者只需要对Web.Config文件进行相关配置就可以了。如:

</system.web>

<authorization>

<deny users="bbb"></deny>

<deny roles="admin"></deny>

</authorization>

</system.web>

这样就可以拒绝bbb用户和所有的角色是admin的用户。

?-匿名用户

*-所有用户

需要说明的一点是,asp.net是按照文件夹进行授权的。要对不同的网页进行不同的授权的话,那你可以把文件分散到不同的文件夹中去,然后在不同的文件夹中建立不同的web.config文件,对该文件夹下的页面进行不同的授权。

(车延禄)

asp.net2.0安全性(3)--验证与授权--转载来自车老师的更多相关文章

  1. asp.net2.0安全性(1)--用户角色篇(起篇)--转载来自车老师

    安全管理的解决方案在.net1.1中几乎为一片空白,对于应用程序的验证与授权大部分的工作是开发人员自己编写代码,或者是借助企业库等工具来实现,此可谓.net1.1中的一大缺憾.在.net2.0中微软为 ...

  2. asp.net2.0安全性(2)--用户个性化设置(1)--转载来自车老师

    在Membership表中可以存储一些用户的基本信息,但有的时候,我们需要记录的用户信息远远不止Membership表中提供的这些,如QQ.MSN.家庭住址.联系电话等等.那如何把这些用户信息记录到数 ...

  3. asp.net2.0安全性(2)--用户个性化设置(2)--转载来自车老师

    上一篇我们用Profile.age等方式可以读取用户的年龄和其它的信息,但有的时候我们要查询显示所有用户的信息,但asp.net没有提供查询所有用户信息的功能,我们只能对现有的用户逐一查询其Profi ...

  4. asp.net2.0安全性(1)--用户角色篇(类)--转载来自车老师

    Membership.MembershipUser和Roles类 用户与角色管理在asp.net2.0中是通过Membership和Roles两个类来实现的. Membership:用户成员账号管理, ...

  5. asp.net2.0安全性(4)--Login系列控件--转载来自车老师

    前面主要说了与安全相关的一系列的类,现在我们使用这些类就可以做出我们自己的安全系统了.其实微软的目的远不至于此,下面我们就来看一下微软为我们提供的Login系列控件. Login系列控件是微软为了简化 ...

  6. asp.net2.0安全性(1)--用户角色篇(代码实现1)--转载来自车老师

    创建用户: MembershipCreateStatus mc; Membership.CreateUser(txtUid.Text, txtPwd.Text, txtEmail.Text, txtQ ...

  7. asp.net2.0安全性(1)--用户角色篇(代码实现2)--转载来自车老师

    加载所有用户 MembershipUserCollection user = Membership.GetAllUsers(); listUser.DataSource = user; listUse ...

  8. 【IHttpHandler】在ASP.Net2.0中使用UrlRewritingNet实现链接重写

    很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看到的当前作者的博客园的域名: http://jx270.cnblogs. ...

  9. Asp.Net2.0下C#环境 Login控件实现用户登录

    原文:Asp.Net2.0下C#环境 Login控件实现用户登录 一.前台显示效果 二.前台代码             <asp:Login ID="Login1" run ...

随机推荐

  1. BZOJ 1029: [JSOI2007]建筑抢修

    1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...

  2. Agg学习笔记

    很久前就听一大牛说起Agg,据说是一个架构极度牛B的2D引擎,沉寂了许久,最后花了两周时间走马观花地把它过了一遍.果然如那大牛所言,这家伙简直就是巧夺天工的艺术品.今天稍稍瞄了一下Google扔出来的 ...

  3. 从零开始学C++之IO流类库(三):文件的读写、二进制文件的读写、文件随机读写

    一.文件的读写 如前面所提,流的读写主要有<<, >>, get, put, read, write 等操作,ofstream 继承自ostream, ifstream 继承自 ...

  4. struts2的总体回想(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)

    ValueStack:struts2的一个存放数据的数据结构(核心) ValueStack大致能够理解为:由Map和对象栈组成 ValueStack作用范围:一个请求,用它来取代request的作用域 ...

  5. getParameter

    近期学习JAVA的WEB开发,遇到Request中相关的getParameter方法问题.在网上找了一下.自己整理,以备以后查用. getParameter得到的都是String类型的.或者是用于读取 ...

  6. jQuery 之 $(this) 出了什么问题?

    近期在写jQuery的时候出了这样一个问题? <html> <head> <title></title> </head> <style ...

  7. source code of MES Data

    <HTML> <HEAD> <TITLE>TELOGS</TITLE> </HEAD> <BODY> <?php /* c ...

  8. ThinkPHP - 模板引擎

    1.导入css/js文件 - CSS文件 <!--<link rel="stylesheet" type="text/css" href=" ...

  9. xzzx

    创建包: CREATE OR REPLACE PACKAGE WYL_TEST_PKG_GGYW_XZZX IS -- Purpose : 公共业务-参保险种注销 --注销选择的险种,并将参保缴费信息 ...

  10. 20150706 js之定时器

    对应智能社:09 定时器的使用 开启定时器: setInterval(xxx(),1000);//间隔型 第一个参数为函数,第二个为时间,单位为毫秒 setTimeout(xxx(),1000);// ...