private Task <ClaimsIdentity> BuscarClaims(AutenticarUsuarioEmpresaComando comando)
        {
            var usuarioEmpresa = _usuarioRepositorio.BuscarUsuarioPorEmail(comando.Email);

            if (usuarioEmpresa == null)
            {
                return(Task.FromResult <ClaimsIdentity>(null));
            }

            _usuarioEmpresa = usuarioEmpresa;
            //Lista de Claims
            return(Task.FromResult(new ClaimsIdentity(
                                       new GenericIdentity(usuarioEmpresa.Id.ToString(), "Token"),
                                       new[] {
                new Claim("VagasZM", "UsuarioEmpresa"),
                new Claim("EmpresaId", _usuarioEmpresa.Empresa.Id.ToString())
            })));
        }
        public async Task <IActionResult> Autenticar([FromForm] AutenticarUsuarioEmpresaComando comando)
        {
            if (comando == null)
            {
                return(await Resposta(null, new List <Notification> {
                    new Notification("Usuario", "Usuário ou senha inválidos")
                }));
            }

            var claimsIdentity = await BuscarClaims(comando);

            if (claimsIdentity == null)
            {
                return(await Resposta(null, new List <Notification> {
                    new Notification("Usuario", "Usuário não encontrado.")
                }));
            }

            if (!_usuarioEmpresa.Autenticado(comando.Senha))
            {
                return(await Resposta(null, new List <Notification> {
                    new Notification("Usuario", "Senha inválida.")
                }));
            }

            var claims = new List <Claim>
            {
                new Claim(JwtRegisteredClaimNames.UniqueName, _usuarioEmpresa.Id.ToString()),
                new Claim(JwtRegisteredClaimNames.NameId, _usuarioEmpresa.Id.ToString()),
                new Claim(JwtRegisteredClaimNames.Email, _usuarioEmpresa.Email.EnderecoEmail),
                new Claim(JwtRegisteredClaimNames.Sub, _usuarioEmpresa.Id.ToString()),
                new Claim(JwtRegisteredClaimNames.Jti, await _tokenOptions.JtiGenerator()),
                new Claim(JwtRegisteredClaimNames.Iat, ConversorData.ConverterParaUnixEpochDate(_tokenOptions.IssuedAt).ToString(), ClaimValueTypes.Integer64),
            };

            foreach (Claim claim in claimsIdentity.Claims)
            {
                claims.Add(claim);
            }

            var jwt = new JwtSecurityToken(
                issuer: _tokenOptions.Issuer,
                audience: _tokenOptions.Audience,
                claims: claims,
                notBefore: _tokenOptions.NotBefore,
                expires: _tokenOptions.Expiration,
                signingCredentials: _tokenOptions.SigningCredentials);

            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            var response = new
            {
                token   = encodedJwt,
                expires = (int)_tokenOptions.ValidFor.TotalSeconds,
                user    = new
                {
                    usuarioId   = _usuarioEmpresa.Id,
                    nome        = _usuarioEmpresa.Nome.nome,
                    email       = _usuarioEmpresa.Email.EnderecoEmail,
                    empresaId   = _usuarioEmpresa.Empresa.Id,
                    nomeEmpresa = _usuarioEmpresa.Empresa.NomeEmpresa.nome
                }
            };

            var json = JsonConvert.SerializeObject(response, _serializerSettings);

            return(new OkObjectResult(json));
        }