• ASP.NET Forms验证


            /// <summary>
            /// 执行用户登录操作
            /// </summary>
            /// <param name="config">授权配置信息</param>
            /// <param name="userData">与登录名相关的用户信息</param>
            /// <param name="expiration">登录Cookie的过期时间,单位:分钟,默认120分钟。</param>
            public static void SignIn(IovAuthConfig config, UserInfo userData, int expiration = 120)
            {
                if (config == null)
                    throw new ArgumentNullException("config");
                if (userData == null)
                    throw new ArgumentNullException("userData");
                if(string.IsNullOrWhiteSpace(config.AppID))
                    throw new ArgumentNullException("AppID");
                // 1. 把需要保存的用户数据转成一个字符串。
                string data = null;
                if (userData != null)
                    data = JsonHelper.Serialize(userData);
    
    
                // 2. 创建一个FormsAuthenticationTicket,它包含登录名以及额外的用户数据。
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                    2, userData.LoginID, DateTime.Now, DateTime.Now.AddDays(1), true, data);
    
    
                // 3. 加密Ticket,变成一个加密的字符串。
                string cookieValue = FormsAuthentication.Encrypt(ticket);
    
    
                // 4. 根据加密结果创建登录Cookie
                HttpCookie cookie = new HttpCookie(config.AppID, cookieValue);
                cookie.HttpOnly = true;
                cookie.Secure = FormsAuthentication.RequireSSL;
                cookie.Domain = FormsAuthentication.CookieDomain;
                cookie.Path = FormsAuthentication.FormsCookiePath;
                //if (expiration > 0)
                //默认过期时间:120分钟
                cookie.Expires = DateTime.Now.AddMinutes(expiration == 0 ? 120 : expiration);
    
                HttpContext context = HttpContext.Current;
                if (context == null)
                    throw new InvalidOperationException();
    
                // 5. 写登录Cookie
                context.Response.Cookies.Remove(cookie.Name);
                context.Response.Cookies.Add(cookie);
            }
    

      web.config同时需要修改两个地方,如下:

      <system.web>
         <authentication mode="Forms">
          <forms name="IOV.Test" loginUrl="/" protection="All" timeout="43200" path="/" domain="" requireSSL="false" slidingExpiration="true" />
        </authentication>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>
    

      

      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"></modules>
      </system.webServer>
    

      获取已登录用户信息:

            /// <summary>
            /// 获取当前用户信息
            /// </summary>
            /// <param name="context">当前Http请求上下文</param>
            /// <returns></returns>
            public static UserInfo TryGetUserInfo(HttpContext context)
            {
                if (context == null)
                    throw new ArgumentNullException("context");
    
                // 1. 读登录Cookie
                HttpCookie cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
                if (cookie == null || string.IsNullOrEmpty(cookie.Value))
                    return null;
    
                try
                {
                    UserInfo userData = null;
                    // 2. 解密Cookie值,获取FormsAuthenticationTicket对象
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
    
                    if (ticket != null && string.IsNullOrEmpty(ticket.UserData) == false)
                        // 3. 还原用户数据
                        userData = JsonHelper.Desrialize<UserInfo>(ticket.UserData);
    
                    return userData;
                }
                catch { /* 有异常也不要抛出,防止攻击者试探。 */ }
                return null;
            }
    

      

  • 相关阅读:
    漫谈iOS程序的证书和签名机制
    (转) Xcode 7 Bitcode
    iOS: How To Make AutoLayout Work On A ScrollView
    Objective C运行时(runtime)
    如何让iOS 保持界面流畅?这些技巧你知道吗
    iPhone 6 屏幕揭秘
    用HTML和CSS实现WWDC 2015上的动画效果
    桌球歷史:削球、快攻、弧圈球
    [WPF 自定义控件]自定义控件库系列文章
    UWP 自定义控件:了解模板化控件 系列文章
  • 原文地址:https://www.cnblogs.com/fjzhang/p/10239905.html
Copyright © 2020-2023  润新知