コード例 #1
0
 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
         }));
     }
 }
コード例 #2
0
        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());
            }
        }