.net的身份验证(专记,不断更新中.....)
由于作者水平有限,本文可能存在很多问题,希望大家提出,谢谢
一、.net的验证模式有四种
windows:将 Windows 验证指定为默认的身份验证模式
Forms: (重点) 将 ASP.NET 基于窗体的身份验证指定为默认身份验证模式
passport:将 Microsoft Passport Network 身份验证指定为默认身份验证模式
none:不指定任何验证模式,提供匿名用户查找
最重要的forms验证开始学习
第一我们了解webconfig中authentication节点
<authentication mode="Forms">
<forms name="userInfor" loginUrl="~/Login.aspx" timeout="30" defaultUrl="~/Default.aspx" cookieless="AutoDetect"/>
</authentication>
cookieless: 获取或设置一个值,该值指示是否使用 Cookie 标识客户端会话
如果所有请求都被视为无 Cookie,则为 true;如果没有任何请求被视为无 Cookie,则为 false;或者为 HttpCookieMode 值之一
默认值为 UseDeviceProfile ;
| 成员名称 | 说明 | |
|---|---|---|
| UseUri | 该调用功能使用查询字符串来存储标识符,无论浏览器或设备是否支持 Cookie。 | |
| UseCookies | 使用 Cookie 保持用户数据,无论浏览器或设备是否支持 Cookie。 | |
| AutoDetect | ASP.NET 确定请求浏览器或设备是否支持 Cookie。 如果请求浏览器或设备支持 Cookie,则 AutoDetect 使用 Cookie 来保持用户数据;否则在查询字符串中使用标识符。 如果浏览器或设备支持使用 Cookie,但当前 Cookie 被禁用,请求功能仍将使用 Cookie。 | |
| UseDeviceProfile | ASP.NET 根据 System.Web.HttpBrowserCapabilities 设置来确定是否使用 Cookie。 如果该设置指示浏览器或设备支持 Cookie,则使用 Cookie;否则在查询字符串中使用标识符。 |
defaultUrl :定义在身份验证之后用于重定向的默认 URL。默认值为 default.aspx ;
loginUrl:指定如果找不到任何有效的身份验证 Cookie,将请求重定向到的用于登录的 URL。默认值为 login.aspx
name:指定要用于身份验证的 HTTP Cookie。默认值为 ".ASPXAUTH" ;如果正在一台服务器上运行多个应用程序,并且每个应用程序都需要唯一的Cookie,则必须在每个应用程序的 Web.config 文件中配置 Cookie 名称。
slidingExpiration :指定是否启用弹性过期时间。
> True 指定启用弹性过期时间。在单个会话期间,身份验证 Cookie 被刷新,并且每个后续请求的到期时间被重置。在 .NET Framework 1.x 版中,默认值为 True。
> False 指定不启用可调过期,并指定 Cookie 在最初发出之后,经过一段设定的时间间隔后过期。在 .NET Framework 2.0 版中,默认值为 False。
timeout :指定 Cookie 过期前逝去的时间(以整数分钟为单位)。如果 SlidingExpiration 属性为 true,则 timeout 属性是滑动值,会在接收到上一个请求之后的指定时间(以分钟为单位)后过期。为防止危及性能并避免向开启 Cookie 警告的用户发出多个浏览器警告,当指定的时间逝去大半时将更新 Cookie。这可能导致精确性受损。持久性 Cookie 不超时。默认值为 "30"(30 分钟)。
第二FormsAuthentication这个类,是管理表单验证的类
这里先介绍常用方法
RedirectFromLoginPage :调用此方法, 将经过身份验证的用户重定向回最初请求的 URL 或默认 URL(defaultUrl )
RedirectToLoginPage : 重定向至登录页(loginUrl)
SetAuthCookie :设置用户存储至cookie中
SignOut : 从浏览器删除 Forms 身份验证票证。
Decrypt :将加密后用户信息字符串作为参数传入后,可以转化为FormsAuthenticationTicket 对象可以查看用户信息
Encrypt :创建一个字符串,其中包含适用于 HTTP Cookie 的加密的 Forms 身份验证票证 接受参数为FormsAuthenticationTicket ticket
GetAuthCookie :通过用户名创建一个cookie
第一种:需要往formsAuthenticationTicket中存储除了用户名以外的信息
formsAuthenticationTicket(int version,string name,DateTime issueDate,DateTime expiration,string userData,string cookiePath)
version:票证的版本号 一般为1
name:与身份验证关联的用户名
issueDate:票证发出时的本地日期和时间
expiration:票证过期时的本地日期和时间
isPersistent:如果票证将存储在持久性cookie(跨浏览器绘话保存)true:保存,false:不保存
userData:存储在票证中的用户特定的数据(一般可以存储权限东西的)
cookiePath:票据存储在Cookie中的路径
例子:
一、简单的用户票证存储
代码
string userId = "xiaoxiaocainiao";
//从其他地方取得用户角色数据
FormsAuthentication.SetAuthCookie(userId, false);
//取出内容
string sTicket= Response.Cookies["userInfor"].Value;
FormsAuthenticationTicket formTicket= FormsAuthentication.Decrypt(sTicket);
注:这种插入的票证,只能简单存储用户名,虽然也可以取出了
二、除了插入用户名外还可以插入一些特有信息比如role(权限)
代码
userId = "xiaoxiaocainiao";
//创建身份票证
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, userId, DateTime.Now, DateTime.Now.AddMinutes(30), true,"rol123");
//加密身份票证
string HashTicket = FormsAuthentication.Encrypt(Ticket);
//将身份票证转化为Cookie保存至Cookie中
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
Context.Response.Cookies.Add(UserCookie);
注:取出身份票证的时候就可以取出 userData:rol123
System.Web.HttpCookie是服务器端通过http请求从客户端获取的Cookie(服务器端用) 身份请求时时服务端发给客户端的
System.Net.Cookie是表示客户端程序通过http响应接收到的Cookie(客户端程序用)


浙公网安备 33010602011771号