C# WebApi 实现身份验证(权限验证)之 Basic基础认证

C# WebApi 实现身份验证(权限验证)之 Basic基础认证

WebApi实现身份验证有四种方式:

  • FORM身份验证
  • 集成WINDOWS验证
  • Basic基础认证
  • Digest摘要认证

本文使用的是Basic基础认证实现。
先简单说一下思路:
要让别人调用你的WebApi时,需要在Authorization 中设置basic用户名和密码,才可以访问(最后的Postman测试)
当调用controller时,需要先验证请求中的身份信息,通过才实现调用Controller的方法,如何实现呢?就是给controller添加一个自定义的验证特性。
所以首先,创建一个验证特性:

    /// 
    /// 基础身份验证特性
    /// 
    public class BasicAuthenticationAttribute:ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            //检验用户ticket信息,用户ticket信息来自调用发起方
            if (actionContext.Request.Headers.Authorization != null)
            {
                //解密用户ticket,并校验用户名密码是否匹配
                var encryptTicket = actionContext.Request.Headers.Authorization.Parameter;//请求信息中验证信息的参数
                if (ValidateUserTicket(encryptTicket))//自定义的判断身份方法
                    base.OnActionExecuting(actionContext);//通过身份验证则继续执行Controller方法
                else
                {
                    actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);//请求状态设置为 401 认证不通过
                    actionContext.Response.Content = new StringContent("权限不足", Encoding.UTF8, "application/json");//返回错误信息
                    //LogHelper
                }
            }
            else//请求中没有添加验证信息,则返回错误
            {
                actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
                string err = "拒绝访问,请先添加验证信息后,在访问此接口!";
                actionContext.Response.Content = new StringContent(err, Encoding.UTF8, "application/json");
            }
        }
        /// 
        /// 校验用户ticket信息
        /// 
        /// 
        /// 
        private bool ValidateUserTicket(string encryptTicket)
        {
            string userpwd = Encoding.Default.GetString(Convert.FromBase64String(encryptTicket));//参数中的验证信息,转为string
            return userpwd.Equals("admin:123");
        }
    }

然后在自己的Controller上添加这个验证特性。调用的时候就会先调用特性中的身份验证方法。我这里增加了一个父类controller,只要需要身份验证的Controller都可以继承它。
C# WebApi 实现身份验证(权限验证)之 Basic基础认证_第1张图片
C# WebApi 实现身份验证(权限验证)之 Basic基础认证_第2张图片

Postman测试:
C# WebApi 实现身份验证(权限验证)之 Basic基础认证_第3张图片

你可能感兴趣的:(.Net,ASP.NET,MVC,学习笔记,WebAPI学习,c#,接口,mvc)