zoukankan      html  css  js  c++  java
  • 构建Forms验证(砖载)

    构建基于forms的验证机制过程如下:
    1,设置IIS为可匿名访问和asp.net web.config中设置为form验证
    2,检索数据存储验证用户,并检索角色(如果不是基于角色可不用)
    3,使用FormsAuthenticationTicket创建一个Cookie并回发到客户端,并存储
    角色到票据中,如:
    FormsAuthentication.SetAuthCookie(Username,true | false)
    cookies保存时间:
    HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.Now.AddDays(1)

    如果需要存储角色,采用:
    FormsAuthenticationTicket authTicket = new
    FormsAuthenticationTicket(
    1, // 版本号。
    txtUserName.Text, // 与身份验证票关联的用户名。
    DateTime.Now, // Cookie 的发出时间。
    DateTime.Now.AddMinutes(20),// Cookie 的到期日期。
    false, // 如果 Cookie 是持久的,为 true;否则为 false。
    roles ); // 将存储在 Cookie 中的用户定义数据。
    roles是一个角色字符串数组
    string encryptedTicket = FormsAuthentication.Encrypt(authTicket); //加密

    存入Cookie
    HttpCookie authCookie =
    new HttpCookie(FormsAuthentication.FormsCookieName,
    encryptedTicket);

    Response.Cookies.Add(authCookie);

    4,在Application_AuthenticateRequest事件中处理程序中(Global.asax)中,使用
    票创建IPrincipal对象并存在HttpContext.User中
    代码:
    HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);//解密
    string[] roles = authTicket.UserData.Split(new char[]{';'});//根据存入时的格式分解,;或|....
    Context.User = new GenericPrincipal(Context.User.Identity, Roles);//存到HttpContext.User中

    判断某个角色验证
    HttpContext.Current.User.IsInRole(roles)
    具体实现

    Web.config文件
    加入节点,name为COOKIE名称,loginUrl为没有通过验证跳转的地址
    <system.web>
    <authentication mode="Forms">
    <forms name="Hstear"
    loginUrl="login.aspx" protection="All" path="/" timeout="40"/>
    </authentication>
    </system.web>
    设置目录访问 path为目录名,roles为票据中的角色名
    发现网上的都说要单独一个WEB.CONFIG文件放在目录中,但实际在根目录中设置即可,单个文件也一样
    <location path="Admin">
    <system.web>
    <authorization>
    <allow roles="admin"/>
    <deny users="*"/>
    </authorization>
    </system.web>
    </location>
    Global.asax文件
    Application_AuthenticateRequest事件中加入
    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
    string cookieName = FormsAuthentication.FormsCookieName;
    HttpCookie authCookie = Context.Request.Cookies[cookieName];
    FormsAuthenticationTicket authTicket = null;
    try
    {
    authTicket = FormsAuthentication.Decrypt(authCookie.Value);
    }
    catch(Exception ex)
    {
    return;
    }
    string[] roles = authTicket.UserData.Split(new char[]{','});//如果存取多个角色,我们把它分解
    FormsIdentity id = new FormsIdentity( authTicket );
    GenericPrincipal principal = new GenericPrincipal(id, roles);
    Context.User =principal;//存到HttpContext.User中
    }
    来源:(http://blog.sina.com.cn/s/blog_4a9b5fcf0100c9bq.html) - FormsAuthenticationTicket基于forms的验证_先飞_新浪博客
  • 相关阅读:
    【20210930】连岳摘抄
    【20211002】连岳摘抄
    网站首页head区代码规范(网页设计师必看)
    让你的VMware Workstation随主系统自动启动
    asp中使用图片验证码的方法
    文本筐怎样让它只能输入数字(以及怎么只能输入一个小数点和数字)
    asp通用分页函数
    系统安装秘技:精心打造WinXP万能GHOST(图)
    asp调用存储过程
    在 win2k3 下安装 webeasymail
  • 原文地址:https://www.cnblogs.com/johnwonder/p/1756818.html
Copyright © 2011-2022 走看看