public Task AuthenticateAsync(HttpAuthenticationContext context,
                                      CancellationToken cancellationToken)
        {
            context.Principal = null;
            AuthenticationHeaderValue authentication =
                context.Request.Headers.Authorization;

            if (authentication != null && authentication.Scheme == "Basic")
            {
                string[] authData
                    = Encoding.ASCII.GetString(Convert.FromBase64String(
                                                   authentication.Parameter)).Split(':');
                context.Principal
                    = StaticUserManager.AuthenticateUser(authData[0], authData[1]);
            }

            if (context.Principal == null)
            {
                context.ErrorResult
                    = new UnauthorizedResult(new AuthenticationHeaderValue[] {
                    new AuthenticationHeaderValue("Basic")
                }, context.Request);
            }

            return(Task.FromResult <object>(null));
        }
        protected override async Task <HttpResponseMessage> SendAsync(
            HttpRequestMessage request,
            CancellationToken cancellationToken)
        {
            AuthenticationHeaderValue authentication = request.Headers.Authorization;

            if (authentication != null && authentication.Scheme == "Basic")
            {
                string[] authData =
                    Encoding.ASCII.GetString(Convert.FromBase64String(
                                                 authentication.Parameter)).Split(':');
                request.GetRequestContext().Principal
                    = StaticUserManager.AuthenticateUser(authData[0], authData[1]);
            }

            HttpResponseMessage response = await base.SendAsync(request,
                                                                cancellationToken);

            if (response.StatusCode == HttpStatusCode.Unauthorized)
            {
                response.Headers.Add("WWW-Authenticate", "Basic");
            }
            return(response);
        }