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