Autenticación Machine to Machine con Express y Auth0

Clase 15 de 28Curso de Auth0: Implementación de Autenticación y Seguridad Web

Resumen

¿Cómo implementar autenticación machine to machine usando Express?

La autenticación backend a backend, o machine to machine, es esencial para asegurar la comunicación entre APIs. En esta sesión, exploraremos cómo configurar esta autenticación utilizando el framework Express y Auth0. Siguiendo un proceso detallado y utilizando los Quickstarts de Auth0, podrás implementar este tipo de autenticación de manera eficiente.

¿Qué pasos seguir para configurar Auth0?

  1. Crear y configurar una nueva API:
    • Accede al dashboard de Auth0 y crea una nueva API.
    • Define un identificador, por ejemplo, https://machine-to-machine.failure.go.
  2. Definir permisos y scopes:
    • Una vez creada la API, es crucial establecer permisos.
    • Un ejemplo podría ser el permiso read:messages, necesario para leer mensajes a través de la API.

¿Cómo proteger el servidor con Express y Auth0?

Una vez configurada la API, es el momento de integrar la protección en el backend utilizando Express.

  1. Configurar middleware de autenticación:

    • Instala el paquete express-oauth2-jwt-bearer. Este paquete es fundamental para validar tokens JWT en tus endpoints.
    • Crea el middleware encargándose de controlar la autenticación:
    const { auth, requiredScopes } = require('express-oauth2-jwt-bearer');
    const checkJwt = auth({
        audience: 'https://machine-to-machine.failure.go',
        issuerBaseURL: `https://tu-dominio.auth0.com/`,
    });
    
  2. Proteger endpoints privados:

    • Asegúrate de que tu API tenga un endpoint protegido que requiera autenticación:
    app.get('/api/private', checkJwt, (req, res) => {
        res.send('Hello from a private endpoint! You need to be authenticated to see this.');
    });
    
  3. Validar scopes en endpoints específicos:

    • Añade validación de scopes para controlar el acceso a ciertos recursos:
    app.get('/api/private-scoped', checkJwt, requiredScopes('read:messages'), (req, res) => {
        res.send('Hello from a private endpoint with scope! You need to be authenticated and have the right scope to see this.');
    });
    

¿Cómo realizar pruebas de nuestra implementación?

Para asegurarte de que la implementación está correcta, es importante realizar pruebas utilizando un cliente de test.

  1. Crear y autorizar una aplicación de pruebas:

    • Desde la tab de pruebas en Auth0, genera un cliente de test.
  2. Pedir y probar un access token:

    • Obtén un access token y realiza peticiones para verificar el acceso a tus endpoints protegidos:
    curl --request GET \
      --url http://localhost:3010/api/private \
      --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
    
  3. Verificar acceso a endpoints con scopes:

    • Realiza una nueva petición con el scope necesario para asegurar que la validación de scopes también funciona correctamente:
    curl --request GET \
      --url http://localhost:3010/api/private-scoped \
      --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_WITH_SCOPE'
    

Con este enfoque, puedes asegurar que tu implementación de machine to machine es robusta, efectiva, y está lista para proteger tus datos. No dudes en experimentar y expandir este ejemplo usando otros frameworks de backend como Django. ¡La práctica es la clave para el dominio de habilidades!