Forms验证与验证票相关

一般登录的时候,会有以下具体的流程:

1. 在浏览器中有个登录窗体,要输入用户名和密码等凭证,通过提交给服务器的ASP.NET网站来审核,检查是否正确。

2. 如果凭证正确,那么就会再服务器端创建一个FormsAuthenticationTicket实例,其中含有信息:

Cookie 的路径。注意,窗体的路径设置为 URL 的大小写不一致而采取的一种保护措施。这在刷新Expiration:获取/时间。

Cookie,则返回 Cookie 将限制在浏览器生命周期范围内。

Cookie 的日期Name:获取与身份验证UserData :获取存储在Version:返回字节版本号供将来使用。

3. 这个FormsAuthenticationTicket实例被加密成一个字符串,写入到web.configform节点name属性指定的cookie中,然后发送到客户端。

4. 然后将用户重定向到最初请求的URL中。

Forms验证中的API

组成Forms验证的API以及相关的类:

FormsAuthenticationModule:对每个请求进行验证的HTTP模块

FormsAuthentication:包含在Forms验证中我们常用的方法和属性(很重要的)

FormsIdentityForms验证标识。

FormsAuthenticationTicket:身份验证的票据,对用户的信息进行加密后的产物,我们一般把它加密成字符串写到cookie中。

上面的类在System.Web.Security下。

FormsAuthenticationModule

它是一个实现了IHttpModule接口的类。它可以用来处理每个请求的Application_AuthenticateRequest事件。如果发送了的请求中已经包含了cookie信息,那么这个模块就对cookie信息进行解密和解析,然后构造一个GenericPrincipal的类实例填充Context.User,并且也创建一个FormsIdentity的实例。

注意:当我们在web.config中配置了Forms验证后,那么我们在Application_AuthenticateRequest事件写的代码要是和Forms相关的API

FormsAuthentication

这个类很重要。

它有很多的其他方法和属性:

FormsAuthenticate中涉及到客户端保存cookie的两个属性就是:

FormsCookieName:获取或者设设置cookie的名称

FormsCookiePath:获取或者设置cookieurl路径

其中FormsCookiePath属性有一点要注意:大多数的浏览器会在判断cookie是否要和请求一起发送时,用到cookie路径。(我们一般在配置文件配置path="/"),如果我们配置的path不是"/",那么这个cookie就不会和请求发送到服务器端。

FormsAuthenticate中和cookie操作相关的方法有:

Decrypt:提取身份验证cookie的加密信息,创建FormsAuthenticationTicket,也就是解密。

Encrypt:加密。从FormsAuthenticationTicket中获取信息,并且加密。以备我们之后把加密的信息写入cookie

GetAuthCookie:创建身份验证cookie,但是并不把它立即添加到HTTP响应中。

SetAuthCookie:创建身份验证cookie,并且把它添加到Response.Cookie中。

RenewTicketIfOld:刷新身份验证cookie的生命周期。

GetRedirectUrl:把用户重定向到他们最初请求的页面。

SignOut:使得当前的身份验证cookie过期。我们常用的注销功能。

 

附:代码(从身份验证票中取出用户登陆ID) 

/// <summary>
/// Forms验证中,从用户的身份验证票中取出用户ID
/// </summary>
/// <returns>登录用户的ID</returns>
public static string GetPIDFromForms()
{
    HttpCookie encryptedTicketCki = HttpContext.Current.Request.Cookies[".djnkfijnuyjoa4739df"];        
    string PID = null;
    if (encryptedTicketCki != null)
    {
        FormsAuthenticationTicket ticketback = FormsAuthentication.Decrypt(encryptedTicketCki.Value);
        PID = ticketback.Name;            
    }
    return PID;
}

 其中, .djnkfijnuyjoa4739df  来源为web.config中的配置:

<authorization>
  <deny users="?" />
</authorization>
<authentication mode="Forms">
  <forms loginUrl="login.aspx?forms=false" name=".djnkfijnuyjoa4739df" timeout="60" path="/" />
</authentication>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值