//Sobreponho a classe responsavel por chamar a autorização de um request / HttpActionContext Contem informações da ação de requisição
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            HttpRequestMessage request = new HttpRequestMessage();
            try
            {
                //Representa informações de autenticação em Authorization, ProxyAuthorization, WWW-Authneticate, e valores de cabeçalho Proxy-Authenticate.
                AuthenticationHeaderValue authValue = actionContext.Request.Headers.Authorization;

                //Objeto de configuração que associa ao request
                request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

                //Se não houver valor para authValue ele abre uma caixa de login
                if (authValue != null && !String.IsNullOrWhiteSpace(authValue.Parameter) && authValue.Scheme == BasicAuthResponseHeaderValue)
                {
                    //Contem as informações de usuario e senha. Ver método ParseAuthorizationHeader
                    Credentials parsedCredentials = ParseAuthorizationHeader(authValue.Parameter);

                    if (parsedCredentials != null)
                    {

                        //Identidade do usuário logado
                        CurrentUser = new CustomPrincipal(parsedCredentials.CPF, null);

                        CustomRoleProvider CurrentRole = new CustomRoleProvider();

                        //Aqui pode ser feita as consistências para validação do usuário
                        //if (!user.Contains(parsedCredentials.CPF))
                        if (!CurrentUser.GetUsers().Contains(parsedCredentials.CPF))
                        {
                            actionContext.Response = request.CreateResponse(HttpStatusCode.Unauthorized, "Serviço não permitido");
                            actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                            return;
                        }

                        if (!CurrentUser.GetUsers(parsedCredentials.CPF, parsedCredentials.Senha))
                        {
                            actionContext.Response = request.CreateResponse(HttpStatusCode.Unauthorized, "Senha Incorreta");
                            actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                            return;
                        }

                        if (!CurrentRole.IsUserInRole(parsedCredentials.CPF, Roles))
                        {
                            actionContext.Response = request.CreateResponse(HttpStatusCode.MethodNotAllowed, "Não tem permissão");
                            actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                            return;
                        }

                       //Se passar pelas validações ele simplesmente da um return, caso contrário a aplicação para.
                       // actionContext.Response = request.CreateResponse(HttpStatusCode.Continue);
                       // actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                        return;

                    }
                    else
                    {
                        actionContext.Response = request.CreateResponse(HttpStatusCode.Unauthorized, "Necessário efetuar login");
                        actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                        return;
                    }
                }
                else
                {
                    actionContext.Response = request.CreateResponse(HttpStatusCode.Unauthorized, "Usuário não encontrado");
                    actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                    return;
                }
            }
            catch (Exception)
            {
                actionContext.Response = request.CreateResponse(HttpStatusCode.InternalServerError);
                actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                return;

            }
        }
        //Sobreponho a classe responsavel por chamar a autorização de um request / HttpActionContext Contem informações da ação de requisição
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            HttpRequestMessage request = new HttpRequestMessage();

            try
            {
                //Representa informações de autenticação em Authorization, ProxyAuthorization, WWW-Authneticate, e valores de cabeçalho Proxy-Authenticate.
                AuthenticationHeaderValue authValue = actionContext.Request.Headers.Authorization;

                //Objeto de configuração que associa ao request
                request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

                //Se não houver valor para authValue ele abre uma caixa de login
                if (authValue != null && !String.IsNullOrWhiteSpace(authValue.Parameter) && authValue.Scheme == BasicAuthResponseHeaderValue)
                {
                    //Contem as informações de usuario e senha. Ver método ParseAuthorizationHeader
                    Credentials parsedCredentials = ParseAuthorizationHeader(authValue.Parameter);

                    if (parsedCredentials != null)
                    {
                        //Identidade do usuário logado
                        CurrentUser = new CustomPrincipal(parsedCredentials.CPF, null);

                        CustomRoleProvider CurrentRole = new CustomRoleProvider();

                        //Aqui pode ser feita as consistências para validação do usuário
                        //if (!user.Contains(parsedCredentials.CPF))
                        if (!CurrentUser.GetUsers().Contains(parsedCredentials.CPF))
                        {
                            actionContext.Response = request.CreateResponse(HttpStatusCode.Unauthorized, "Serviço não permitido");
                            actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                            return;
                        }

                        if (!CurrentUser.GetUsers(parsedCredentials.CPF, parsedCredentials.Senha))
                        {
                            actionContext.Response = request.CreateResponse(HttpStatusCode.Unauthorized, "Senha Incorreta");
                            actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                            return;
                        }

                        if (!CurrentRole.IsUserInRole(parsedCredentials.CPF, Roles))
                        {
                            actionContext.Response = request.CreateResponse(HttpStatusCode.MethodNotAllowed, "Não tem permissão");
                            actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                            return;
                        }


                        //Se passar pelas validações ele simplesmente da um return, caso contrário a aplicação para.
                        // actionContext.Response = request.CreateResponse(HttpStatusCode.Continue);
                        // actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                        return;
                    }
                    else
                    {
                        actionContext.Response = request.CreateResponse(HttpStatusCode.Unauthorized, "Necessário efetuar login");
                        actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                        return;
                    }
                }
                else
                {
                    actionContext.Response = request.CreateResponse(HttpStatusCode.Unauthorized, "Usuário não encontrado");
                    actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                    return;
                }
            }
            catch (Exception)
            {
                actionContext.Response = request.CreateResponse(HttpStatusCode.InternalServerError);
                actionContext.Response.Headers.Add(BasicAuthResponseHeader, BasicAuthResponseHeaderValue);
                return;
            }
        }