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); }