public IActionResult RequestToken([FromBody] UsuarioView request)
        {
            if (request == null || string.IsNullOrEmpty(request.Login) || (request.Senha.Length == 0))
            {
                //return BadRequest(new { message = "Usuário ou senha incorreta" });
                return(Unauthorized());
            }
            else
            {
                var usuario = usuarioService.Autentica(request.Login, request.Senha.ToString());

                if (usuario != null)
                {
                    var claims = new[]
                    {
                        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")),
                        new Claim(JwtRegisteredClaimNames.UniqueName, usuario.Id.ToString()),
                        new Claim(ClaimTypes.Name, usuario.Id.ToString()),
                        new Claim(ClaimTypes.Email, usuario.TbUsuarioConta.Email)
                    };

                    //recebe uma instancia da classe SymmetricSecurityKey
                    //armazenando a chave de criptografia usada na criação do token
                    var key = new SymmetricSecurityKey(
                        Encoding.UTF8.GetBytes(_configuration["SecurityKey"]));

                    //recebe um objeto do tipo SigninCredentials contendo a chave de
                    //criptografia e o algoritimo de segurança empregados na geração
                    //de assinaturas digitais para tokens
                    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
                    var token = new JwtSecurityToken(
                        issuer: "wkuroki.net",
                        audience: "wkuroki.net",
                        claims: claims,
                        expires: DateTime.Now.AddHours(12),
                        signingCredentials: creds);

                    /*
                     * var token = new JwtSecurityTokenHandler().WriteToken(tokeOptions);
                     * return Ok(new { Token = token });
                     */
                    return(Ok(new
                    {
                        token = new JwtSecurityTokenHandler().WriteToken(token)
                    }));
                }
                else
                {
                    return(Unauthorized());
                    //return BadRequest("Credenciais inválidas!!!");
                }
            }
        }
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            var header = context.OwinContext.Response.Headers.SingleOrDefault(h => h.Key == "Access-Control-Allow-Origin");

            if (header.Equals(default(KeyValuePair <string, string[]>)))
            {
                context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
            }

            UsuarioService.AdicionaUsuarioMaster();

            var user = UsuarioService.Autentica(context.Password, context.UserName);

            if (user == null)
            {
                #region Log
                LogService.CriaLogMongo(new LogModel
                {
                    Classe     = "SimpleAuthorizationServerProvider",
                    Controller = "",
                    Data       = DateTime.Now,
                    Linha      = 29,
                    Mensagem   = "Usuário não encontrado: " + context.UserName,
                    Metodo     = "GrantResourceOwnerCredentials",
                    Tipo       = Tipo.Erro,
                    QtdeRegistrosRetornados = 0
                });
                #endregion

                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }

            var identity = new ClaimsIdentity(context.Options.AuthenticationType);
            identity.AddClaim(new Claim("sub", context.UserName));
            identity.AddClaim(new Claim("role", "user"));

            context.Validated(identity);

            #region Log
            LogService.CriaLogMongo(new LogModel
            {
                Classe     = "SimpleAuthorizationServerProvider",
                Controller = "",
                Data       = DateTime.Now,
                Linha      = 29,
                Mensagem   = "Usuário Autorizado: " + context.UserName + " AuthenticantionType: " + identity.AuthenticationType + " IsAuthenticated: " + identity.IsAuthenticated,
                Metodo     = "GrantResourceOwnerCredentials",
                Tipo       = Tipo.Info,
                QtdeRegistrosRetornados = 1
            });
            #endregion
        }