예제 #1
0
        public async Task <UsuarioLogadoDTO> GerarJwtAsync(UsuarioLogadoDTO login)
        {
            try
            {
                //var permissoes = await _ctx.ViewPerfilUsuario.AsNoTracking().Where(a => a.IdPerfil == 1).ToListAsync();

                List <Claim> claims = new List <Claim>();
                // claims.Add(new Claim(JwtRegisteredClaimNames.Sub, login.UserToken.Id));
                claims.Add(new Claim("idUsuario", login.UserToken.Id));
                claims.Add(new Claim("administrador", login.UserToken.Administrador.ToString()));
                claims.Add(new Claim(JwtRegisteredClaimNames.Email, login.UserToken.Email));
                claims.Add(new Claim(JwtRegisteredClaimNames.NameId, login.UserToken.Usuario));
                claims.Add(new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()));
                claims.Add(new Claim(JwtRegisteredClaimNames.Nbf, ToUnixEpochDate(DateTime.UtcNow).ToString()));
                claims.Add(new Claim(JwtRegisteredClaimNames.Iat, ToUnixEpochDate(DateTime.UtcNow).ToString(), ClaimValueTypes.Integer64));

                //List<Claim> permClaim = new List<Claim>();
                //foreach (var item in permissoes)
                //{
                //    if (!string.IsNullOrEmpty(item.Permissao))
                //    {
                //        claims.Add(new Claim("Roles", item.Permissao));
                //    }
                //}

                var identityClaims = new ClaimsIdentity();
                identityClaims.AddClaims(claims);

                var tokenHandler = new JwtSecurityTokenHandler();
                var key          = Encoding.ASCII.GetBytes(_appSettings.Secret);

                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Issuer             = _appSettings.Emissor,
                    Audience           = _appSettings.ValidoEm,
                    Subject            = identityClaims,
                    Expires            = DateTime.UtcNow.AddHours(_appSettings.ExpiracaoHoras),
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
                                                                SecurityAlgorithms.HmacSha256Signature)
                };

                var token        = tokenHandler.CreateToken(tokenDescriptor);
                var encodedtoken = tokenHandler.WriteToken(token);

                login.AccesToken = encodedtoken;
                login.ExpiresIn  = TimeSpan.FromHours(_appSettings.ExpiracaoHoras).TotalSeconds;
                // login.UserToken.Claims = claims.Select(c => new UsuarioClaim { Type = c.Type, Value = c.Value });
                return(login);
            }catch (Exception ex)
            {
                _log.GerarLogDisc("Erro ao Gerar Claims Usuario", ex: ex);
                throw new Exception("Erro", ex);
            }
        }
        public bool Autenticar(string email, string senha, out UsuarioLogadoDTO usuarioLogadoDTO)
        {
            usuarioLogadoDTO = null;

            if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(senha))
            {
                return(false);
            }

            Usuario usuario = _context.Usuario.SingleOrDefault(x => x.Email == email && Convert.ToBase64String(x.Senha) == Convert.ToBase64String(SenhaCriptografada(senha)));

            if (usuario == null)
            {
                return(false);
            }

            JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();

            byte[] key = Encoding.ASCII.GetBytes(_appSettings.Segredo);
            SecurityTokenDescriptor tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(ObterClaims(usuario)),
                Expires            = DateTime.UtcNow.AddDays(_appSettings.ExpiracaoToken),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var token       = tokenHandler.CreateToken(tokenDescriptor);
            var tokenString = tokenHandler.WriteToken(token);

            usuarioLogadoDTO = new UsuarioLogadoDTO {
                ID      = usuario.ID,
                Usuario = usuario.Email,
                Nome    = usuario.Nome,
                Token   = tokenString,
                Papeis  = usuario.ObterPapeis()
            };

            return(true);
        }