WebApi的调用-3.Basic验证

Basic基本验证

webapi里的特性

/// <summary>
    ///  Basic验证   
    /// </summary>
    /// <remarks>
    ///     
    /// </remarks>
    public class BasicAuthorizeAttibute : AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            var authorization = actionContext.Request.Headers.Authorization; //HTTP标头的Authorization值
            //ActionDescriptor方法上,ActionDescriptor.ControllerDescriptor 类上
            //有[AllowAnonymousAttribute] 的情况下
            if (actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>(true).Count != 0
                || actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>(true).Count != 0)
            {
                base.OnAuthorization(actionContext);
            }
            else if (authorization != null && authorization.Parameter != null)
            {
                //用户逻辑验证
                if (ValidateTicket(authorization.Parameter))
                {
                    base.IsAuthorized(actionContext);
                }
                else
                {
                    this.HandleUnauthorizedRequest(actionContext);
                }
            }
            else
            {
                this.HandleUnauthorizedRequest(actionContext);
            }
        }


        /// <summary>
        ///  验证用户逻辑   
        /// </summary>
        /// <param name="encryptTicket" type="string">
        /// 
        /// </param>
        /// 
        private bool ValidateTicket(string encryptTicket)
        {
           // var strTicket = FormsAuthentication.Decrypt(encryptTicket.Remove(encryptTicket.Length - 1).Remove(0, 1));
            var strTicket = FormsAuthentication.Decrypt(encryptTicket);
            return string.Equals(strTicket.UserData, string.Format("{0}&{1}", "admin", "123"));
        }
    }

获取ticket

        [AllowAnonymous]
        [HttpGet]
        public HttpResponseMessage Login(string account, string password)
        {
            Model.User user = new User();
            if (account == "admin" && password == "123")
            {
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(0, account, DateTime.Now,
                           DateTime.Now.AddHours(1), true, string.Format("{0}&{1}", account, password),
                           FormsAuthentication.FormsCookiePath);
                return Success(user = new User() { name = account, pass = password, ticket = FormsAuthentication.Encrypt(ticket) });
            }
            else
            {
                return Msg("登录失败");
            }
        }

MVC里面请求头(后台请求)

public string GetApi(string method, string queryString)
        {
            var result = ApiHelper.Instance.RequestApi(method, queryString, GetApiHeader());
            return result;
        }

private WebHeaderCollection GetApiHeader()
        {
            string key = string.Format(GlobalVar.UserTiketCacheKey);
            var result = CacheHelper.CacheReader(key);
            WebHeaderCollection header = new WebHeaderCollection();
            header.Add(HttpRequestHeader.Authorization, "BasicAuth " + result);
            return header;
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,856评论 25 709
  • 之前的文章中,我们熟悉了 WebAPI 同时也了解到,在现在很多公司的项目中已经项目的架构已经有很多不仅仅是建造 ...
    李九lijiu阅读 5,020评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,796评论 19 139
  • 深夜,静静闭上眼睛,深深呼吸,将昨日的烦恼一并呼出。 生活如晚霞一般,需要色彩的渲染,才不会枯燥无色。 强者遇到困...
    风筝夕汐阅读 1,839评论 1 1
  • 你有没有这样的时候:生而为人对不起?
    与真正的自己相遇阅读 1,098评论 0 0