public override void OnAuthorization(HttpActionContext actionContext) { if ((actionContext.Request.Headers.Authorization == null) || string.IsNullOrWhiteSpace(actionContext.Request.Headers.Authorization.Scheme.Trim()) || actionContext.Request.Headers.Authorization.Scheme.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Count() != 2) { _mensagem = ErrorMessages.AUTENTICACAO_INVALIDA; base.OnAuthorization(actionContext); return; } else { string usuario = actionContext.Request.Headers.Authorization.Scheme.Split('|')[0]; string senhaToken = actionContext.Request.Headers.Authorization.Scheme.Split('|')[1]; string ip = ((HttpContextWrapper)actionContext.Request.Properties["MS_HttpContext"]).Request.UserHostName; DateTime agora = DateTime.Now; string origem = actionContext.Request.RequestUri.AbsolutePath; if (origem.EndsWith("/login/logar", StringComparison.OrdinalIgnoreCase)) { //Autenticar por senha. if (_usuarioBusiness.Count(x => x.Login.Equals(usuario) && x.Senha.Equals(senhaToken)) > 0) { //Renovar token, se existir. Token tokenExistente = _tokenBusiness.GetItens(token => token.Login.Equals(usuario)).FirstOrDefault(); if (tokenExistente != null) { tokenExistente.IP = ip; tokenExistente.Chave = Cripto.GeraToken(usuario, ip); tokenExistente.Validade = DateTime.Now.AddMinutes(30); _tokenBusiness.Update(tokenExistente); } else //Se não, criar novo token. { Token t = new Token() { IP = ip, Login = usuario, Chave = Cripto.GeraToken(usuario, ip), Validade = DateTime.Now.AddMinutes(30) }; _tokenBusiness.Add(t); } } else { //Chamar esse metodo sempre que não for autorizado _mensagem = ErrorMessages.USUARIO_OU_SENHA_INVALIDO; base.OnAuthorization(actionContext); return; } } else { //Autenticar por token. if (_tokenBusiness.Count(token => token.Chave.Equals(senhaToken)) == 0) { //Chamar esse metodo sempre que não for autorizado _mensagem = ErrorMessages.AUTENTICACAO_INVALIDA; base.OnAuthorization(actionContext); return; } } } }