Nos falto el ejemplo practico para implementar un refresh token 😦
Introducción
Autentificación y Autorización en Node.js con JSON Web Tokens
Autenticación vs. autorización
Autenticación y Autorización en Node.js para eCommerce
Protección de contraseñas
Creación de Middleware para Autenticación con API Key
Hashing de Contraseñas con BYNCrip: Seguridad y Verificación
Implementación de Hashing en Endpoints de Usuario y Cliente
Passport y JSON Web Tokens
Implementación de Autenticación con Passport.js y Estrategia Local
Autenticación con JSON Web Tokens: Creación y Verificación
Firma y Verificación de JSON Web Tokens con JavaScript
Generación y Firma de Tokens JWT en APIs Backend
Protección de Rutas con JWT y Passport en Node.js
Gestión de Roles y Permisos en API Restful
Consulta de Órdenes de Compra Usando Token de Sesión en Node.js
Gestión de Autenticación y Autorización en Aplicaciones Web
Envío de emails con Node.js
Envío de Correos con NodeMailer y Configuración SMTP en Node.js
Implementación de Recuperación de Contraseña en API con NotMailer
Recuperación de contraseñas
Generación Segura de Links para Recuperación de Contraseña
Cambio Seguro de Contraseña con Token y Expiración
Despliegue a producción
Deployment de Aplicaciones Node.js en Heroku con Autenticación y Migraciones
Próximos pasos
Autenticación y Autorización con GoodNove.js y JWT
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La autenticación y autorización basada en tokens es un aspecto esencial cuando se desarrolla una aplicación web. Adoptar prácticas adecuadas garantiza una experiencia de usuario fluida y segura. Abordemos de qué manera un Single Page Application (SPA) desarrollado en Angular, React o Vue puede gestionar sesiones al conectarse a una API.
El manejo correcto de un token después de un login exitoso es crucial. El token es el corazón de la autenticación, ya que se utiliza para autorizar todas las peticiones a la API. ¿Qué deberíamos considerar?
cookies
o en Local Storage
, aunque las cookies son la opción más segura.Una vez el token está asegurado, es primordial que sea enviado con cada solicitud a la API. Aquí algunos pasos para asegurarse de ello:
Authorization: Bearer <token>
.Los tokens tienen una vida útil limitada por razones de seguridad. Así es como puedes manejarlos:
La seguridad y la gestión de permisos están interrelacionadas en el uso de tokens:
Con estas consideraciones prácticas, podrás manejar la autenticación y autorización de manera eficiente y segura en tu aplicación. Al seguir estos lineamientos, puedes asegurar una experiencia de usuario positiva mientras mantienes la integridad y seguridad de tu aplicación.
Aportes 8
Preguntas 5
Nos falto el ejemplo practico para implementar un refresh token 😦
Consideraciones a tener en cuenta:
Al hacer un login en la API nos da la información del usuario, pero también envían el token. Lo más importante es guardar el token porque debe enviarse en todas las peticiones.
Hola devs!! acá led dejo un artículo súper práctico para la implementación de los refresh token -> click aquí
HAPPY CODING!
Acá un ejemplo de cómo se podría implementar el refresh-token desde el cliente, (no es del proyecto que estamos haciendo en este curso pero puede ser útil para entender la lógica):
export const RefreshTokenService = async (): Promise<boolean> => {
try {
await axios.get(`${GLOBALS.API_HOST}/api/session/refresh`, {
withCredentials: true,
});
return true;
} catch (err) {
return false;
}
};
// En este caso es una función para añadir un producto a los favoritos a partir de su id.
// El parametro it es un contador de los intentos que sirve para intentar refrescar el
// access token una sola vez.
export const AddToFavoritesService = async (it: number, id: string): Promise<boolean> => {
// Si luego de intentar refrescar el access-token sigue fallando, retorna false como
// indicador de que no se pudo realizar.
if (it > 2) return false;
try {
// Intenta añadir a favoritos
const payload = { id };
const response = await axios.post(`${GLOBALS.API_HOST}/api/user/favorites`, payload, {
withCredentials: true,
});
return response.status === 200 ? true : false;
} catch (err) {
// Si el servidor response algo diferente a 200 (OK) axios lo tomará como error
// Por lo que entrará a este catch
if (axios.isAxiosError(err)) {
// El código de estado 403 es el que nos indica en este caso que el access-token
// está vencido o no es válido
if (err.response?.status === 403) {
// Ejecutamos la función para refrescar el token
await RefreshTokenService();
// Hacemos una llamada recursiva a la función de añadir a favoritos para intentar
// de nuevo, pero aumentamos en uno el contador de iteraciones para poner el límite.
return await AddToFavoritesService(++it, id);
}
return false;
}
return false;
}
};
Como que esto debió haber sido parte del curso en lugar de nomás mencionarlo, no? 😐
Con un token empezamos a manejar la capa de autenticación y de autorización desde el lado del backen, pero del lado de los clientes es diferente, lo hacen a través de una interfaz creada por Angular, React o Vue que se conectan a la API y manejan las sesiones, cuando se hace login, nos envía toda la información relacionada con el usuario: nombre, email, datos de fechas, incluso un avatar y lo más importante el token, todo esto se debe almacenar para tener mas accesos.
Las fases o etapas a considerar desde el punto de vista de la sesión del cliente, es decir desde el Browser o la app (aplicaciones móviles) son las siguientes:
En el login nos mandan el token, este debemos guardarlo porque lo enviaremos en todas las peticiones.
Podemos guardar el token en Cookies (lo más recomendado) o en LocalStorage (no es la mejor práctica).
Es muy usado en bancos el ‘refresh token’ por medidas de seguridad, por ejemplo, cada 15 minutos expira el token y sacamos al usuario de la sesión y debe de vovler a hacer login.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?