asp mvc 3 ActionFilter for basic authentication

后端 未结 4 1847
面向向阳花
面向向阳花 2020-12-30 14:29

I have an ASP MVC3 restful service that uses basic authentication. After searching stack overflow, I created the following code.

public class BasicAuthentic         


        
4条回答
  •  梦毁少年i
    2020-12-30 15:07

    Refactored version of Adrian's

    public class BasicAuthenticationAttribute : ActionFilterAttribute
    {
        private static readonly string AuthorizationHeader = "Authorization";
        private static readonly string BasicHeader = "Basic ";
        private static readonly string Username = "username";
        private static readonly string Password = "password";
        private static readonly char[] Separator = ":".ToCharArray();
    
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            try
            {
                if (!Authenticated(filterContext.HttpContext.Request))
                    filterContext.Result = new HttpUnauthorizedResult();
    
                base.OnActionExecuting(filterContext);
            }
            catch
            {
                filterContext.Result = new HttpUnauthorizedResult();
            }
        }
    
        private bool Authenticated(HttpRequestBase httpRequestBase)
        {
            bool authenticated = false;
    
            if (String.IsNullOrEmpty(httpRequestBase.Headers[AuthorizationHeader]) == false &&
                httpRequestBase.Headers[AuthorizationHeader].StartsWith(BasicHeader, StringComparison.InvariantCultureIgnoreCase))
            {
                string[] credentials = Encoding.ASCII.GetString(Convert.FromBase64String(
                    httpRequestBase.Headers[AuthorizationHeader].Substring(BasicHeader.Length))).Split(Separator);
    
                if (credentials.Length == 2 && credentials[0] == Username && credentials[1] == Password)
                {
                    authenticated = true;
                }
            }
    
            return authenticated;
        }
    }
    

提交回复
热议问题