Beispiel #1
0
        public AutenticacionDTO GetLogin(string username = "", string password = "")
        {
            AutenticacionDTO objresponse = new AutenticacionDTO();

            objresponse.usuario = CheckUser(username, password);

            if (objresponse.usuario != null)
            {
                objresponse.token = JwtManager.GenerateToken(objresponse.usuario);
            }
            else
            {
                objresponse = null;
            }

            return(objresponse);
        }
Beispiel #2
0
        public async Task <AutenticacionDTO> Login(string login, string password)
        {
            var tokenGenerado = new AutenticacionDTO();

            var cuenta = await _usuariosRepositorio.ObtenerUsuarioEmailAsync(login);

            var comprobarAccesso = await _usuariosRepositorio.VerificarCredencialesAsync(cuenta, password);

            if (!comprobarAccesso)
            {
                tokenGenerado.Valid   = false;
                tokenGenerado.Message = "El usuario o contraseña son invalidos";

                return(tokenGenerado);
            }

            tokenGenerado = await GenerarTokenAutorizacion(cuenta);

            tokenGenerado.Valid = true;

            return(tokenGenerado);
        }
Beispiel #3
0
        /// <summary>
        /// ACTUALIZA EL TOKEN Y EL REFRESH TOKEN DESPUES DE QUE CUMPLE SU CADUCIDAD
        /// </summary>
        /// <param name="refreshToken"></param>
        /// <returns></returns>
        public async Task <AutenticacionDTO> RefreshTokenAsync(string token, string refreshToken)
        {
            AutenticacionDTO autenticacionDTO = new AutenticacionDTO();

            var generarToken = GenerarToken(token);

            if (generarToken == null)
            {
                throw new Exception("El token erroneo");
            }

            var tiempoExpiracionNuevoToken = generarToken.Claims.SingleOrDefault(x => x.Type == JwtRegisteredClaimNames.Exp).Value;

            long fechaExpiracionCorto = long.Parse(tiempoExpiracionNuevoToken);

            var tiempoExpiracionCorto = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(fechaExpiracionCorto);

            var jti = generarToken.Claims.SingleOrDefault(x => x.Type == JwtRegisteredClaimNames.Jti).Value;


            if (tiempoExpiracionCorto > DateTime.UtcNow)
            {
                throw new Excepcion("El token aún es válido, no ha expirado");
            }

            var obtenerRefreshToken = await _tokenRepositorio.ObtenerTokenAsync(refreshToken);

            if (obtenerRefreshToken == null)
            {
                throw new Excepcion("El token es invalido, no existe");
            }

            if (obtenerRefreshToken.Expiracion < DateTime.UtcNow)
            {
                throw new Excepcion("El token es invalido, este ha expirado hace poco");
            }

            if (obtenerRefreshToken.Valido)
            {
                throw new Excepcion("El token es invalido, el token ya fue usado");
            }

            if (obtenerRefreshToken.Usado)
            {
                throw new Excepcion("El token es invalido, el token de actualización ya fue usado anteriormente");
            }

            if (obtenerRefreshToken.JwtId != jti)
            {
                throw new Excepcion("El token es invalido, el token de actualización no coincide con jwt");
            }

            if (obtenerRefreshToken.Expiracion < DateTime.UtcNow)
            {
                throw new Excepcion("El token es válido, el token aun no ha expirado");
            }


            obtenerRefreshToken.Usado = true;

            await _tokenRepositorio.ActualizarTokenAsync(obtenerRefreshToken);

            Guid idUsuario = Guid.Parse(generarToken.Claims.SingleOrDefault(x => x.Type == "Id").Value);

            var obtenerUsuario = await _usuariosRepositorio.ObtenerUsuarioPorIdAsync(idUsuario);

            return(await GenerarTokenAutorizacion(obtenerUsuario));
        }