public object Post([FromBody] CredenciaisAcesso credentials) { try { if (credentials == null) { return(BadRequest()); } return(Ok(_userComponent.GetByLogin(credentials))); } catch (Exception ex) { return(BadRequest(new RequestResponse { Mensagem = ex.Message })); } }
public object GetByLogin(CredenciaisAcesso credenciais) { bool credentialsIsValid = false; if (credenciais != null && !string.IsNullOrWhiteSpace(credenciais.Usuario)) { baseUser = _userRepository.GetByLogin(credenciais.Usuario); if (credenciais.TipoConcessao == "password") { //converte em base64 var plainTextBytes = Encoding.UTF8.GetBytes(credenciais.Senha); string encodedText = Convert.ToBase64String(plainTextBytes); credenciais.Senha = encodedText; credentialsIsValid = (baseUser != null && credenciais.Usuario == baseUser.Email && credenciais.Senha == baseUser.Senha); } else if (credenciais.TipoConcessao == "refresh_token") { if (!String.IsNullOrWhiteSpace(credenciais.RefreshToken)) { RefreshToken refreshTokenBase = _refreshTokenRepository.GetRefreshToken(baseUser.PessoaId); DateTime expirationDate = DateTime.Parse(credenciais.Expiration); expirationDate = expirationDate + TimeSpan.FromSeconds(_tokenConfiguration.FinalExpiration); DateTime atual = DateTime.Now; credentialsIsValid = (refreshTokenBase != null && baseUser.PessoaId == refreshTokenBase.PessoaId && refreshTokenBase.Token == credenciais.RefreshToken && expirationDate >= atual); } } } if (credentialsIsValid) { var userClaim = UserClaim.ConvertEntityToClaim(baseUser); var identity = new ClaimsIdentity( new GenericIdentity(userClaim.Email, "Email"), new[] { new Claim(ClaimTypes.Sid, userClaim.PessoaId.ToString()), new Claim(ClaimTypes.Name, baseUser.Nome), new Claim(ClaimTypes.Email, userClaim.Email), new Claim(ClaimTypes.NameIdentifier, userClaim.PessoaId.ToString()) } ); DateTime createDate = DateTime.Now.ToUniversalTime(); DateTime expirationDate = createDate.ToUniversalTime() + TimeSpan.FromSeconds(_tokenConfiguration.Seconds); // Calcula o tempo máximo de validade do refresh token // (o mesmo será invalidado automaticamente pelo Redis) TimeSpan finalExpiration = TimeSpan.FromSeconds(_tokenConfiguration.FinalExpiration); var handler = new JwtSecurityTokenHandler(); string token = CreateToken(identity, createDate, expirationDate, handler); return(SuccessObject(createDate, expirationDate, token, finalExpiration, baseUser.PessoaId)); } else { return(ExceptionObject()); } }