学习froms验证(三)

froms中timeout值得注意的问题

一般我们不设置这个值是默认的30分钟,也就是说绝对的过期时间为30分钟,当我们希望在每次用户向站点发出请求时,只要票据还没有过期就重新设置过期时间.可以通过slidingExpiration配置选项来实现该行为.如果将它设置为true,每次FormsAuthenticationModule对用户通过认证后,就更新该用户的票据的expiry(相当于有效期).如果设置为false (默认值), 就不对expiry进行更新,后果就是,用户票据一旦过了设置好的绝对过期点,用户就从认证用户变成匿名用户.

例子:

<authentication mode="Forms">   
<forms    slidingExpiration="true"  timeout="60"     /> </authentication>

 

 

forms authentication system使用何种cookie策略,取决于<forms>元素里的cookieless设置,它可以有如下四种配置:

.UseCookies——指定总是使用基于cookie的票据

.UseUri——指定从不使用基于cookie的票据

(如果是这种方式系统必须对所有页面的URL编码以包含票据数据)

.AutoDetect——如果device profile不支持cookies,就不使用基于cookie的票据;如果device profile支持cookies,那么就运用一种探测机制来判断是否可以使用cookies.

.UseDeviceProfile——这是默认值.如果device profile支持cookies,就使用基于cookie的票据.不运用探测机制.

一般我们设置成UseDeviceProfile,当浏览器支持cookies,就是用基于cookie的票据,如果不支持就对所有页面的URL编码以包含票据数据

例子:

<authentication mode="Forms"> 
 <formscookieless="UseDeviceProfile" slidingExpiration="true" timeout="60"/>
</authentication>

 

对票据运用何种安全措施取决于<forms>元素里protection的配置.该项的值可为如下几个值之一:

.All——默认值,票据要加密且运用数据有效性验证

.Encryption——只加密,不生成MAC

.None——既不加密也不运用数据有效性验证.

.Validation——生成一个MAC,但不对票据加密,以纯文本的形式传递.

微软强烈推荐使用All配置选项.

(MAC就是一小片信息,用来对需要进行验证的数据(就本文而言,就是票据)实施鉴别.如果数据被改动过,那么MAC就不能与改动过的数据匹配)

学习上面的内容以后我们就可以自己重写用户数据验证,并且进一步加入用户数据

以前用下面一段代码写入用户验证票

FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked);

现在改为

Code

注意以上代码信息相关存储是基于Cookies票据,对于无Cookies票据我们是无法存储用户数据的

以下代码是得到用户数据

 

FormsIdentity ident = User.Identity as FormsIdentity;

FormsAuthenticationTicket ticket = ident.Ticket;

string userDataString = ticket.UserData;

 

ASP.NET接到一个请求后,通过一系列的步骤对请求进行处理.在每一步都会触发一个具体的事件,这就为开发人员楔入ASP.NET处理通道内部,在其生命周期的某一点上对请求进行修改提供了可能.FormsAuthenticationModule为例,当ASP.NET引发AuthenticateReques事件后,在该事件里它对请求进行认证票据检查,如果在请求里发现了票据,就生成一个GenericPrincipal对象,并赋值给HttpContext.User属性.

 

AuthenticateRequest事件之后,ASP.NET又引发PostAuthenticateRequest事件, 在该事件里,我们可以将FormsAuthenticationModule创建的GenericPrincipal对象替换为我们自定义的CustomPrincipal对象的一个实例

 

Code

 

对应的CustomIdenttity代码为

Code

对应的CustomPrincipal类是

 

Code

 

posted @ 2009-10-27 14:46  胡佳180815  阅读(788)  评论(3)    收藏  举报