分享
 
 
 

Asp.Net Unleashed 2nd Edition 学习笔记 第五部分

王朝asp·作者佚名  2007-01-16
窄屏简体版  字體: |||超大  

Part V: Securing ASP.NET Applications

CHAPTER 19 Using Forms-Based Authentication

Forms认证和Passport认证都是需要cookie支持的,两者区别在于

Forms认证可以使开发员对用户名和密码保进行自定义存储,例如web.config文件、xml文件或者database表

Passport认证利用了MS的Passport认证,是一种集中处理认证的方式,可以一次登录,保证同一个用户名和密码在多个web站点也有效

19.1 Working with Forms Authentication

Forms认证的优点就在于可以把用户名和密码按照自己的意愿存放在任何位置

Forms认证需要浏览器的cookie支持,以便甄别用户

关于Forms认证的类位于System.Web.Security命名空间下面,最重要的几个类是,

FormsAuthentication,包含了几个和Forms认证一同工作的方法

FormsAuthenticationTicket,代表了在Forms认证中,只用在cookie内的认证票据

FormsIdentity,代表了通过使用Forms认证后,被认证用户的标识

FormsAuthenticationModule,这个类是在Forms认证中的一个使用的模块

Enabling Forms Authentication

为了能够使用Forms认证,必须完成几个步骤,

在Web.config文件的authentication section设置认证模式,mode="Forms"

在Web.config文件的authorization section设定禁止对应用程序的目录进行匿名访问 deny users="?"

创建登陆页面,允许用户输入用户名和密码

在登陆页面,使用FormsAuthentication.RedirectFromLoginPage()方法,来进行重定向回进入登陆页面之前的被访问页面。

FormAuthentication.RedirectFromLoginPage()方法,完成了两件事情,

第一,根据传入的参数,创建临时或者永久的cookie

第二,把用户返回到在进入登陆页面之前的被访问页面

Configuring Forms Authentication

web.config文件的authentication section可选的子节点是forms,forms可以如下几个属性,

loginUrl,如果需要认证,用户被自动重定向的登陆页面的URL地址

name,包含认证票据的浏览器cookie的名字

timeout,cookie过期的时间,默认30分钟。不适用于persistent cookie

path,使用到cookie的路径,默认是/

protection,保护cookie数据的方法,可以选择值有All/None/Encryption/Validation,默认是All

Configuring Forms Authorization

web.config文件中,authorization section可以包含deny子节点和allow子节点

deny和allow子节点的属性有

verbs,用于控制用户是否可以使用HTTP协议的Post或者Get

users,使用*代表所有用户,使用?代表匿名用户

Retrieving User Information

使用FormsIdentity类的属性,可以识别认证用户的信息

FormsIdentity.AuthenticationType,对于Forms认证的用户总是返回Forms

FromsIdentity.IsAuthenticated,表明用户是否认证通过

FormsIdentity.Name,代表了被认证用户的名字

FormsIdentity.Ticket,确定了和当前用户相关的cookie认证票据

FormsIdentity.Ticket属性返回了用户相关的cookie认证票据,使用FormsAuthenticationTicket类可以获得其他有的信息,

FormsAuthenticationTicket.CookiePath,认证票据cookie的路径

FormsAuthenticationTicket.Expiration,认证票据cookie过期的日期

FormsAuthenticationTicket.Expired,bool值,表明当前认证票据是否已经过期

FormsAuthenticationTicket.IsPersistent,用户表明认证票据是否包含在persistent cookie中

FormsAuthenticationTicket.IssueDate,包含认证票据的cookie创建的日期时间

FormsAuthenticationTicket.Name,和认证票据相关的用户名

FormsAuthenticationTicket.UserData,开发员自定义的,包含在认证票据中的自定义数据

FormsAuthenticationTicket.Version,一个整数值,代表了认证票据的版本号码。现在,默认情况下,这个属性总是返回1

Creating a Sign-Out Page

如果允许退出登录,编程匿名人士,可以使用FormsAuthentication.SignOut()方法,使用FormsAuthentication.SighOut()方法可以删除会话cookie或者persistent cookie

Authenticating Users with the Web.Config File

Forms认证的一个巨大优点就是把可以把用户名和密码按照自己的意愿存放在任何位置,例如,可以存放在web.config中,

形如<forms> <credentials passwordFormat="Clear" > <user name="tom" password="tom" /> </credentials> </forms>

就是把用户名和密码存放在了web.config文件中,通过再在authorization中禁止匿名访问,就可以达到必须是用户名是tom,密码也是tom的人才能够访问本站点

通过使用FormAuthentication.Authenticate()方法,可以确定给定的用户名和密码是否在web.config文件中

Encrypting Passwords in the Web.Config File

在上例中,因为密码是明文书写在了web.config文件中,很危险,通过指定credentials的passwordFormat属性为某一个加密算法,并且把明文的password属性值更改为加密后的值,就可以减小一些危险

那么,使用加密算法,有一个问题就是在FormsAuthentication.Authenticate()方法中,就无法达到匹配的目的,因为密码是加密过的,而用户输入的密码是一个明文,怎么解决问题呢,使用FormsAuthentication.HashPasswordForStoringInConfigFile()方法来完成,而不再使用FormsAuthentication.Authenticate()方法了

Authenticating Users with an XML File

除了在web.config文件中存储用户名和密码,也可以把用户名和密码放在单独的XML文件中

书上例子,放在了Passwords.xml文件中,为了能够完成把用户名和密码单独存储在xml文件的目的,需要创建四个文件

Web.config,包含了认证和授权的配置信息

Passwords.xml,存储了用户名和密码的文件

Login.aspx,验证用户名和密码,验证的依据就是passwords.xml文件

Register.aspx,允许用户名在站点进行注册,从而向Passwords.xml文件中新增用户名和密码

web.config文件不必多讲,就是在授权部分禁止了匿名访问

Passwords.xml文件中,都是形如<Passwords> <user> <name>Tom</name> <password>tom</password> </user> </Passwords>的格式

在Login.aspx文件中,就是使用DataSet读取Passwords.xml,然后拿用户输入的用户名和密码与每一条记录进行对比,有的话呢,就是FormsAuthentication.RedirectFromLoginPage()方法

在Register.aspx文件中,还是使用DataSet读取Passwords.xml,然后拿用户输入的用户名和密码与每一条记录对比,有的话,就是有重复,让用户重新输入,没有呢,就插入到DataSet中,然后调用FormsAuthentication.RedirectFromLoginPage()方法

Authenticating Users with a Database Table

相较于存储在web.config和一个xml文件中,存储在数据表里面是更常用的办法,这个时候使用DataTable代表了数据表,然后使用和上面的存储在xml文件中类似的办法完成用户登陆和注册就可以了

Implementing Roles-based Authentication

很多的时候,需要把用户进行分角色,以便授予他们不同的权限,例如bbs中,有斑竹,有管理员,有普通注册用户

为了能够给用户分角色,需要在Global.asax文件的Application_AuthenticateRequest()方法中进行编码,例如,

String[] arrRoles = new String[] {"Supervisors", "Users"};

Context.User = New GenericPrincipal( Context.User.Identity, arrRoles );

上面的两句代码,就是把当前用户分配到"Supervisors"和"Users"角色中了

或者通过使用一个xml文件记录了用户所在的角色,然后在Application_AuthenticateRequest()方法中,根据用户名找到他所属于的角色,并分配给当前用户。如果角色、用户信息存储在数据库中,也是一样的做法

Creating a Custom Authentication Ticket

Forms认证使用了存储在cookie中的认证票据来完成用户认证工作的。认证票据是在FormsAuthentication.RedirectFromLoginPage()方法的时候自动创建并添加到浏览器当中的

一般来讲,认证票据中的信息是足够用了。如果不够用,可以手动增加一个认证票据,放在浏览器中,例如,你想增加某些需要的自定义信息,可以创建一个FormsAuthenticationTicket类的实例,并在这个实例的userData属性中增加自定义的信息

Using Forms Authentication and Web Farms

默认情况下,不能够在多个服务器之间共享认证票据cookie,因为每个服务器会自动产生他自己的key,所以,如果想要共享认证票据cookie,必须在machine.config或者web.config文件中声明如下的内容:

<machineKey validationKey="AutoGenerate, IsolateApps" decryptionKey="AutoGerate, IsolateApps" validation="SHA1" />

19.2 Working with Passport Authentication

Enabling Passport Authentication

Enabling Users to Sign In and Sign Out

Retrieving User Information

心情不好,懒得看了,可能很有用,用的时候再说吧

CHAPTER 20 Using Windows-Based Authentication

20.1 Working with Windows Authentication

使用基于windows帐户的验证适合在内部网使用,每一台机器有一个帐号,可以使用集成域控制器上面的账号进行安全验证

20.2 Impersonating User Accounts

20.3 Setting Security Policies

心情不好,懒得看了,可能很有用,用的时候再说吧

CHAPTER 21 Encrypting Data over the Network

这部分讲解了SSL这个安全的协议的情况,需要的时候再看了

21.1 Using the Secure Sockets Layer

21.2 Configuring Your Server to Use SSL

21.3 Using SSL in ASP.NET Pages

21.4 Using .NET Encryption Classes

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有