Brandon Lee Aguero Fernandez
Wow! 🤯, sin duda aprovechare los tests que nos ofrece postman, porque yo anteriormente copiaba y pegaba el token, ahora ya jamas 🙌
Proteger un endpoint privado con un token es la forma más tradicional de controlar quién accede a qué dentro de una API. Aquí aprendes cómo funciona el flujo entre cliente y servidor cuando usas autorización tipo Basic y Bearer, por qué necesitas HTTPS y qué rol cumple el token como tarjeta de acceso temporal.
Esta guía te sirve si estás construyendo una API en Node.js con Express, si quieres entender qué pasa detrás de un formulario de login, o si te preparas para temas más avanzados como JSON Web Tokens y Open Authorization.
¿Qué pasa cuando llamas a un endpoint público y a uno privado?
La diferencia entre ambos se nota desde la primera petición HTTP. Cuando haces un request a un endpoint público, el servidor responde directamente con un 200 OK y el contenido. No hay validación, no hay credenciales, no pasa nada raro.
Cuando llamas a un endpoint privado sin credenciales, el servidor te responde con un error 401, que significa no autorizado. Ese código te indica que el recurso existe, pero necesitas demostrar quién eres antes de acceder.
¿Qué significa el error 401 en una API? Significa que el cliente no envió credenciales válidas o no envió ninguna. El servidor reconoce el endpoint, pero exige autenticación antes de devolver el contenido.
¿Cómo se obtiene un token con autorización Basic?
Para acceder al recurso privado primero pides un token. Eso se hace con una petición POST al endpoint /token usando autorización tipo Basic. En este tipo de autorización envías usuario y contraseña concatenados con dos puntos y codificados en base64 [02:00].
El servidor valida esas credenciales contra su base de datos y, si todo cuadra, te devuelve un token. Ese token funciona como una medalla o tarjeta de acceso que usarás en las siguientes peticiones.
Un detalle clave: la codificación en base64 no es encriptación. Es un proceso reversible, cualquiera con el header puede decodificarlo y leer tu usuario y contraseña. Por eso la autorización Basic siempre debe viajar sobre HTTPS, nunca sobre HTTP plano.
¿Cómo accedes al endpoint privado con autorización Bearer?
Una vez tienes el token, cambias el tipo de autorización. Ya no envías usuario y contraseña, sino el token dentro de un header tipo Bearer. El servidor recibe ese token, lo verifica, comprueba que no esté expirado y, si todo está en orden, responde con el contenido privado.
¿Cuál es la diferencia entre Basic y Bearer? Basic envía usuario y contraseña codificados en base64 para autenticarte. Bearer envía un token que ya prueba que estuviste autenticado antes, sin volver a exponer credenciales.
¿Cómo se implementa este flujo en Express?
El ejemplo usa un servidor Express escrito en Node.js corriendo en el puerto 3000 [05:30]. El archivo index carga las variables de entorno al inicio porque hay secretos que no deben quedar expuestos en el código.
Dentro del archivo se definen tres endpoints:
/public: responde directamente con I am public./token: recibe credenciales Basic, valida el usuario y emite un token firmado./private: exige un token Bearer, lo verifica y responde con I am private.La función getCredentials toma el request, extrae el header de autorización, hace un split para separar el tipo (Basic) del valor codificado y devuelve el usuario y la contraseña ya decodificados [07:15]. Si ese header no existe, lanza el error que viste antes.
¿Cómo se valida el token en el endpoint privado?
En /private el flujo es similar pero con Bearer. Si el header falta o el tipo no es el adecuado, devuelves un error. Si todo está bien, extraes la cadena del token y pasas a la fase de verificación.
Verificar el token es indispensable. Sin esa validación, cualquiera podría llegar con un token inventado y hacerse pasar por un usuario legítimo. Después de verificar la firma, también revisas el tiempo de expiración: comparas la fecha de expiración guardada en el token con la fecha actual y, si ya pasó, rechazas la petición.
¿Cómo pruebas el flujo completo en Postman?
Postman simplifica todo el proceso. Para /public basta un GET a localhost:3000/public y obtienes la respuesta. Para /token configuras una autorización tipo Basic Auth, donde Postman toma el usuario y la contraseña, los concatena con dos puntos, los codifica en base64 y arma el header por ti.
Un truco útil: en la pestaña Tests de Postman puedes capturar el token de la respuesta y guardarlo como variable de entorno [10:45]. Así no tienes que copiarlo y pegarlo manualmente en cada nueva petición. Después, en /private, cambias el tipo de autorización a Bearer Token y referencias esa variable.
¿Por qué usar variables de entorno en Postman? Te permiten reutilizar valores como tokens, usuarios o URLs entre peticiones sin exponerlos visualmente y sin copiarlos a mano cada vez.
¿Qué limitaciones tiene este esquema de tokens?
Aunque el flujo funciona bien, tiene puntos débiles que conviene tener claros:
Esa última limitación es justo lo que resuelve Open Authorization, donde delegas la autenticación a un proveedor externo en el que confías.
Ahora te toca a ti: dibuja el diagrama de flujo de un endpoint que quieras proteger. ¿Usarías token, sesiones, una palabra secreta? Puedes apoyarte en swimlanes.io o la herramienta que prefieras, y déjame tu propuesta en los comentarios.
Brandon Lee Aguero Fernandez
Wow! 🤯, sin duda aprovechare los tests que nos ofrece postman, porque yo anteriormente copiaba y pegaba el token, ahora ya jamas 🙌
Francisco Martin Nacimiento
Es la segunda vez que repaso el curso, al principio sentí que se me mezclaban los conceptos e ideas, por qué repasar la autenticación tradicional, mientras el curso trata de OAuth, me costó asociar ambos conceptos.
Ahora en mi segunda iteración del curso, siguiendo el hilo de la anterior clase, entiendo que es para repasar la autenticación/autorización "tradicional" (por así llamarla) en comparación con OAauth, es decir, justamente cito la frase de la anterior clase "la autenticación/autorización ya estaba resuelta" pero entre 2 partes, no para cuando hay un 3ro involucrado.
Entonces lo que vemos acá es eso la autenticación/autorización entre 2 partes.
Faltaría creo yo profundizar un poco en por qué el método entre 2 partes no funciona con un 3ro, creo que se pueden argumentar varias cosas, las que puedo argumentar yo son:
- La confianza al tercero, como servicio, no le voy a dar tokens de acceso a cualquier otro servicio. - Como obtener el token sin exponer las credenciales de los usuarios.
Juan Carlos Silva Vargas
Interesantes disertaciones y está bien tener una postura crítica.
Yo vine a aprender... Asi que el repaso me cae bien; pero debo decir que hasta ahora solo lo comprendo en lo tecnico... Cuando nos llevaron al codigo de ejemplo, ya dije "UY SE PUSO HEAVY" por que uno puede echar un vistazo y comprenderlo.
Pero al final, yo vine al curso por que quiero implementar un metodo para dar acceso a los vendedores de mi base de datos en el tenan de microsoft a una herramienta que por ahora va creada en el Front End... y debo construir todas las partes y que tengan congruencia. (Antes no tenia el problema de la validacion de los usuarios, por que ingresaban al formulario de Google con su cuenta de Gmail).
Por si algun buen samaritano y buen lector, lee y me da pistas... o incluso el profe.
Carlos Sanjuan
Algo similar a esto he construido sobre Node.js, ayudandome de librerias como Passport que tienen varias middlewares y metodos para validar el token firmado, como por ejemplo que sea del secret y su tiempo de expiracion.
Víctor Julián González Estrada
Cool
Geovanni Labastida Vázquez
Juan Carlos Silva Vargas
La maravilla de los Agentes de IA y un buen Prompt Engineering:
ChatGPT 5.1
Authorization Code con PKCE realiza validacion con code_challenge y code_verifier
Autenticación sólida del cliente. En lugar de un secreto estático, el cliente se autentica mediante certificados con mutual TLS (mTLS) o con un JWT de cliente (client assertion).
Prueba de posesión (DPoP) o tokens sender‑constrained para proteger el Token en caso de ser robado.
Autenticación multifactor (MFA) Integrar MFA con OAuth 2.0 disminuye drásticamente el impacto de credenciales comprometidas; también se recomienda configurar expiraciones cortas para los tokens y rotación de refresh tokens
Bryan Key
Bueno, el curso hasta ahora va bien, yo colocaria los 5 videos previos y los volveria 1 solo, luego, yo soy backend dev y veo que la parte donde habla de postman lo explica MUY rapido y no explica la herramienta (entiendo que el curso no va de eso) pero supongo que un frontend o un back junior se confundiria con eso, ademas explicar express "muy por encima" tambien medio confunde, veo que hubiera sido mejor explicarlo con algun diagrama o dibujo para que la gente lo "digiera" mejor. Por el resto, perfecto! Go ahead 💚
Dannier Leonides Galicia Chinchilla
No estoy viendo la ventaja de este curso. Los que conocemos, no aprendemos nada nuevo. Y los que no lo conocen tampoco aprenden. Esos saltos bruscos de explicarte como si fueras un niño, y de la nada se salta a usar conceptos de senior. Y gran cacareadera del oauth y oidc y nada aclaró solo conceptos que ni aclaran y ni aportan.
FELIX NADER NUÑEZ
Jesús Ignacio García Fernández
Este es mi aporte del diagrama del flujo de la clase !diagrama
title: Flujo del endpoint /private Postman -> /token: usuario:contraseña note: **usuario y contraseña** está codificado en base64. /token -> /token: getCredential /token -> /token: getUSer /token -> /token: singToken /token -> Postman: token Postman -> /private: _header token_ /private -> /private: getToken /private -> /private: verifyToken /private -> /private: validateExpiration /private -> Postman: response `I'm private` note: ver [clase Preview:protección de url](https://platzi.com/clases/7197-oauth/61128-preview-proteccion-de-un-endpoint/) para mas detalle
Carlos Osvaldo Zapata Arango
Ulqernesh Karvenae
Usaria accessToken (memoria) con refreshToken (cookie http secure ) en donde cada vez que expire el accessToken generar un refreshToken nuevo para tener rotacion
Julio Armando Eufraccio
Hola profesor al ocupar tanto Postman como Insomnia, en la solicitus Post me aparece:
{ "error": "invalid credentials" }
y ya estuve revisando con distintos nombres y distintas secuencias y sigo sin poder obtener mi token.
Saludos
Guillermo Rodas
Profesor¿Podrías compartir el token por acá y un ejemplo de cómo estás enviando la solicitud?
José Josías Padilla Martínez
Tengo una curiosidad, como se comentaba en el video, enviar las credenciales como Basic Auth mediante base64 concatenando con ":", observo un inconveniente. ¿Qué sucedería si el usuario incluye ese símbolo en su email/user o contraseña?, según mis propias pruebas resulta en un fallo como el siguiente:
Guillermo Rodas
ProfesorLo que pasa es que como lo indica la especificación es por eso que el username no podría tener esos caracteres especiales: https://www.ietf.org/rfc/rfc2617.txt de esa forma se tomarían los primer dos puntos ":" y el resto sería considerado el password.
FELIX NADER NUÑEZ
Víctor Muñoz García
Perdón,
En el ejemplo anterior PORT: es PORT=
Víctor Muñoz García
Hola, Cuando ejecuto el endpoint del token, en postman, este me devuelve el siguiente response:
{ "error": "Invalid credentials" }
¿Podrías confirmarme si tengo que generar un archivo .env con un contenido similar al siguiente?
PORT: 3000
USERNAME="victor" PASSWORD="1234" FULLNAME="Víctor Hugo Larraz"
SECRET="Cl4v3S3cret4"
Gracias.
Martin Salazar
esto es lo que pude captar
Alejandro Chavez
Excelente clase, muy bien explicado como funciona la autenticacion tradicional.
Anthony Yoel Matheus García
Inicio | V Solicitar token de acceso | V Validar token de acceso | V Si el token es válido | V Realizar solicitud al endpoint protegido | V Procesar respuesta del endpoint | V Fin
El proceso comienza con el inicio del flujo.
Se solicita un token de acceso al proveedor de autenticación o autorización correspondiente. Esto puede implicar enviar las credenciales de autenticación (como nombre de usuario y contraseña) o utilizar un flujo de autenticación específico, como OAuth o OIDC.
El token de acceso recibido es validado para asegurarse de que es auténtico y válido. Esto puede implicar verificar la firma digital, comprobar la fecha de vencimiento y garantizar que el token sea emitido por una entidad confiable.
Si el token de acceso es válido, se procede a realizar la solicitud al endpoint protegido. Esto puede ser una API o servicio web que requiere autenticación y autorización para acceder a sus recursos.
La respuesta del endpoint protegido es recibida y procesada según las necesidades del sistema. Puede implicar extraer datos relevantes, realizar acciones específicas o realizar algún tipo de procesamiento adicional.
El flujo del proceso llega a su fin una vez que se completa el procesamiento de la respuesta del endpoint protegido.
Este diagrama de flujo ilustra el flujo básico para consumir un endpoint protegido utilizando un token de acceso. Los detalles específicos y los pasos exactos pueden variar según el sistema, el proveedor de autenticación y autorización utilizado, así como el protocolo de seguridad implementado.