Asegurando APIs de Node.js con Tokens de Identidad Descentralizados

Rate this content
Bookmark

La autenticación y autorización son problemas serios. A menudo dedicamos mucho tiempo a crear APIs poderosas pero pasamos por alto las medidas de seguridad adecuadas. Vamos a resolverlo con Magic utilizando una solución de identidad basada en claves sobre el estándar DID, donde las identidades de los usuarios son soberanas y se aprovechan de los pares de claves públicas y privadas de la cadena de bloques. En esta charla, veremos las formas adecuadas de asegurar nuestras APIs de Node.js con Tokens de Identidad Descentralizados. Pasaremos desde aprender qué son los estándares de Identidad Descentralizada, cómo las identidades de los usuarios son soberanas y se aprovechan de los pares de claves públicas y privadas de la cadena de bloques, por qué son el futuro de la seguridad de las APIs, y para poner en práctica la teoría construiremos una implementación real utilizando Node.js donde mostraré las mejores prácticas comunes.

This talk has been presented at JSNation Live 2021, check out the latest edition of this JavaScript Conference.

FAQ

Un token DID es un tipo de token de autenticación y autorización que utiliza la tecnología de cadena de bloques de Ethereum y criptografía de curva elíptica para generar pruebas verificables. Consiste en una afirmación (datos sin firmar del usuario) y una prueba (firma digital realizada con la clave privada del usuario).

Para construir y proteger una API de Node.js, primero se construye la API utilizando Express. Luego, se protege mediante Magic, donde se emplea un token DID para gestionar la autenticación y autorización de los usuarios, protegiendo así las rutas y recursos de la API.

El SDK del cliente de Magic se utiliza para obtener el token DID, pasando la clave de la API. Incluye dos tipos de claves: una clave secreta para el servidor y una clave publicable para aplicaciones cliente. El flujo de autenticación comienza con el inicio de sesión del usuario mediante correo electrónico, obteniendo así un token DID.

La clave secreta en Magic se utiliza en el servidor para gestionar y validar los tokens DID recibidos, mientras que la clave publicable se emplea en las aplicaciones cliente para iniciar operaciones que no requieren alta seguridad, como la autenticación inicial del usuario.

Para verificar un token DID en una API de Node.js, se usa un middleware que extrae el token DID del encabezado de autorización. Luego, se llama a la función 'magic.token.validate()' para validar el token. Si la validación es exitosa, el proceso continúa; de lo contrario, se maneja el error.

El comando 'npx makemagic' es una herramienta que facilita la creación de proyectos de Node.js integrados con Magic. Al ejecutarlo, se puede seleccionar una plantilla, como la de API de Express, y configurar la aplicación automáticamente con las claves necesarias y la estructura básica para usar Magic.

Mohammad Shahbaz Alam
Mohammad Shahbaz Alam
9 min
11 Jun, 2021

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla introduce el concepto de asegurar una API de Node.js utilizando un token de identidad descentralizado. El token se codifica como una cadena Base64 y consta de una prueba y una afirmación. La API está construida utilizando Express y protegida utilizando Magic. La aplicación tiene múltiples rutas, siendo la ruta secreta protegida por middleware. Se verifica el encabezado de autorización y se valida el token DID para acceder a las rutas protegidas.

1. Introducción a los Tokens de Identidad Descentralizados

Short description:

Bienvenidos a esta charla sobre cómo asegurar una API de Node.js utilizando un token de identidad descentralizado. Aprenderemos qué es un token de identidad descentralizado, construiremos una API de Node utilizando Express y la protegeremos utilizando Magic. El token DID está codificado como una cadena Base64, una tupla de cadena JSON, aprovechando el algoritmo de la cadena de bloques de Ethereum y la criptografía de curva elíptica. Consiste en una prueba y una afirmación, siendo la afirmación la representación de los datos del usuario y la prueba firmada utilizando el algoritmo de firma personal de Ethereum. La forma más sencilla de comenzar con Magic es utilizando el SDK del cliente y llamando a la función de inicio de sesión con correo electrónico. Construyamos la API ejecutando npx makemagic seleccionando la plantilla de API de Express.

Bienvenidos a esta charla, donde aprenderemos más sobre cómo asegurar una API de Node.js utilizando un token de identidad descentralizado. Mi nombre es Mohamed Shabaz Alam, un defensor del desarrollo en Magic. En esta charla, aprenderemos qué es un token de identidad descentralizado, construiremos una API de Node utilizando Express y luego protegeremos esa API utilizando Magic. Entonces, ¿qué es un token DID? El token DID creado por Magic se adapta a tecnologías anteriores como JWT y el protocolo W3 DID. Está codificado como una cadena Base64, una tupla de cadena JSON que representa una prueba y una afirmación. Utiliza el algoritmo de la cadena de bloques de Ethereum y la criptografía de curva elíptica para generar una prueba verificable de autenticación y autorización. Estas pruebas son firmas digitales livianas que se comparten entre el cliente y el servidor para gestionar permisos, proteger rutas y recursos y autenticar usuarios.

Un DID típico consta de una prueba y una afirmación. La afirmación es los datos sin firmar que representan los datos del usuario. Y la prueba se realiza firmando eso utilizando el algoritmo de firma personal de Ethereum y utilizando la clave privada del usuario. Y luego obtienes el token DID llamando a B2A y utilizando una cadena de tupla JSON en base64.

Así es como se ve un token DID básico, que consta de emisión, vencimiento, sujeto, DID, tiempo de no antes y todo tipo de información aquí. La emisión es donde usamos la clave pública del usuario en la afirmación. Y cuando firmamos utilizando la función de firma, utilizamos la clave privada del usuario, que nuevamente, no miramos esos datos. Y luego codificamos el token DID para que se pueda transportar fácilmente a través de HTTP. Y la forma más sencilla de comenzar con Magic es utilizando el SDK del cliente de Magic. El SDK del cliente es donde obtienes el token DID. Entonces usas eso, pasas la clave de la API, que son dos tipos de clave de API. Una es la clave publicable y la otra es la clave secreta. La clave secreta se utiliza para el servidor. La clave publicable es para aplicaciones cliente. Llamas a una función llamada inicio de sesión con correo electrónico y luego pasas el correo electrónico del usuario. De forma predeterminada, obtendrás un token DID con una duración de 15 minutos, pero si quieres más que eso, puedes llamar a la función getIDtoken para obtenerlo. El flujo de autenticación es que un usuario llama al cliente autenticándose, obtienen el token DID y lo intercambian en la cabecera de autorización con el servidor, y el servidor valida ese token y luego permite la ruta protegida. Así que construyamos la API. La forma más sencilla de comenzar es ejecutar npx makemagic seleccionando la plantilla de API de Express. Ya he hecho esto, y verán que ejecuté una aplicación. Solo mostraré cómo se ve. Por ejemplo, npx makemagic template express API, te pedirá el nombre de tu aplicación, prueba API, y luego puedes usar la clave secreta publicable. Por ejemplo, puedes obtener esta clave secreta iniciando sesión en Magic y registrándote.

2. Securing the Application

Short description:

Si no puedes ver esto, selecciona tu aplicación y revela la clave secreta. Una vez hecho esto, tu aplicación estará abierta en el puerto 8080 con múltiples rutas. La ruta básica está desprotegida, mientras que la ruta secreta está protegida por un middleware. La función isAuthorized verifica el encabezado de autorización, extrae el token DID y lo valida. Puedes obtener el token DID ejecutando NPX make magic y seleccionando la siguiente plantilla. Pasa la clave secreta para acceder a las rutas protegidas. Siéntete libre de explorar la documentación en magic y comunicarte si tienes alguna pregunta o problema.

Es gratis hacer eso y copiar la clave secreta de la carpeta de la aplicación. Si no puedes ver esto, selecciona esto y selecciona tu aplicación, y luego revela la clave secreta. Solo pégala aquí y luego selecciona tu aplicación, eso es todo. Y una vez que eso esté hecho, estará abierto y se verá algo así. Tu aplicación se está ejecutando en el puerto 8080, por lo que esto te da múltiples rutas. La ruta normal es la ruta básica, que te da una ruta desprotegida. Otra es la ruta secreta, que está protegida por un middleware que hemos escrito, que siempre puedes ver en el ejemplo. Ya he creado una aplicación llamada jsnationnav. Solo mira esta función, verás que no está sucediendo mucho, pero esta es una API muy básica, donde estamos usando la clave secreta de magic de la variable de entorno, también estamos usando una variable de puerto, y luego estamos instanciando magic aquí. Luego, esta es una lista de tareas por hacer, que simula la base de datos, pero obviamente necesitarías una base de datos adecuada. Esta es una ruta desprotegida, esta es una ruta protegida, la proteges llamando a isAuthorized. Mostraré cómo se ve la función isAuthorized. Entonces, este es el middleware y estas tareas por hacer son como rutas de API no protegidas, es una solicitud GET y obtiene un id, como obtener uno, como la primera tarea por hacer o la segunda tarea por hacer. Estas no están protegidas, por lo que otra forma de usar la ruta protegida o el middleware es usar app.use() y pasar las funciones de autorización, lo que hemos llamado isAuthorized, y luego todas estas rutas están protegidas por defecto porque las estamos usando aquí. Entonces, si queremos usarlo de la manera anterior, tendríamos que pasarlo a todas las funciones aquí. Veamos cómo se ve isAuthorized, acepta solicitud, respuesta y siguiente. Verificamos primero si el encabezado de autorización no está definido y luego extraemos el token DID del encabezado y luego llamamos a magic.token.validate(), que muestra si hay un error, dirán que hay un error y, de lo contrario, continuaremos llamando a siguiente y viceversa. Puedes encontrar más detalles cuando ejecutes NPX make magic y esta plantilla. Entonces, la forma más fácil de ver esto es obtener un token DID. La forma más fácil de obtener el token DID nuevamente es ejecutar NPX make magic y usar la plantilla next. Ejecutarán tu servidor y una vez que inicies sesión te dará un token DID.

Así que una vez que hagas eso, solo pasa la clave secreta aquí y he pegado esto y verás que esto está solicitando que estamos permitidos y si no lo estamos, diremos que esto ha fallado y tiene actualizaciones, put, delete y todo tipo de verbos HTTP restful. Así que puedes encontrar más información sobre eso. Entonces, la forma más fácil de ejecutarlo es obtener el token DID desde el frontend ejecutando este comando en particular: npx make magic y seleccionando una plantilla next. Por defecto, next no te dará mucha ayuda en términos de token DID. Entonces, lo que he hecho es que he tomado un DID aquí y luego llamando a la función get DID token y luego mostrando el token DID. Siéntete libre de explorar la documentación en magic y sí, estos son los recursos que puedes encontrar y aprender más sobre ellos y si tienes algún problema, simplemente ejecuta npx mdspzalm, mi nombre de usuario y luego habrá un montón de información. No dudes en comunicarte conmigo si tienes alguna pregunta. Así que sí, gracias de nuevo a JS Nation por tenerme y por una maravillosa conferencia. ¡Adiós!

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Node Congress 2022Node Congress 2022
26 min
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Top Content
The talk discusses the importance of supply chain security in the open source ecosystem, highlighting the risks of relying on open source code without proper code review. It explores the trend of supply chain attacks and the need for a new approach to detect and block malicious dependencies. The talk also introduces Socket, a tool that assesses the security of packages and provides automation and analysis to protect against malware and supply chain attacks. It emphasizes the need to prioritize security in software development and offers insights into potential solutions such as realms and Deno's command line flags.
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Node Congress 2022Node Congress 2022
34 min
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Top Content
There is a need for a standard library of APIs for JavaScript runtimes, as there are currently multiple ways to perform fundamental tasks like base64 encoding. JavaScript runtimes have historically lacked a standard library, causing friction and difficulty for developers. The idea of a small core has both benefits and drawbacks, with some runtimes abusing it to limit innovation. There is a misalignment between Node and web browsers in terms of functionality and API standards. The proposal is to involve browser developers in conversations about API standardization and to create a common standard library for JavaScript runtimes.
ESM Loaders: Mejorando la carga de módulos en Node.js
JSNation 2023JSNation 2023
22 min
ESM Loaders: Mejorando la carga de módulos en Node.js
ESM Loaders enhance module loading in Node.js by resolving URLs and reading files from the disk. Module loaders can override modules and change how they are found. Enhancing the loading phase involves loading directly from HTTP and loading TypeScript code without building it. The loader in the module URL handles URL resolution and uses fetch to fetch the source code. Loaders can be chained together to load from different sources, transform source code, and resolve URLs differently. The future of module loading enhancements is promising and simple to use.
Diagnostics de Node.js listos para usar
Node Congress 2022Node Congress 2022
34 min
Diagnostics de Node.js listos para usar
This talk covers various techniques for getting diagnostics information out of Node.js, including debugging with environment variables, handling warnings and deprecations, tracing uncaught exceptions and process exit, using the v8 inspector and dev tools, and generating diagnostic reports. The speaker also mentions areas for improvement in Node.js diagnostics and provides resources for learning and contributing. Additionally, the responsibilities of the Technical Steering Committee in the TS community are discussed.
El estado de la autenticación sin contraseña en la web
JSNation 2023JSNation 2023
30 min
El estado de la autenticación sin contraseña en la web
Passwords are terrible and easily hacked, with most people not using password managers. The credential management API and autocomplete attribute can improve user experience and security. Two-factor authentication enhances security but regresses user experience. Passkeys offer a seamless and secure login experience, but browser support may be limited. Recommendations include detecting Passkey support and offering fallbacks to passwords and two-factor authentication.
Compatibilidad con Node.js en Deno
Node Congress 2022Node Congress 2022
34 min
Compatibilidad con Node.js en Deno
Deno aims to provide Node.js compatibility to make migration smoother and easier. While Deno can run apps and libraries offered for Node.js, not all are supported yet. There are trade-offs to consider, such as incompatible APIs and a less ideal developer experience. Deno is working on improving compatibility and the transition process. Efforts include porting Node.js modules, exploring a superset approach, and transparent package installation from npm.

Workshops on related topic

Masterclass de Node.js
Node Congress 2023Node Congress 2023
109 min
Masterclass de Node.js
Top Content
Workshop
Matteo Collina
Matteo Collina
¿Alguna vez has tenido dificultades para diseñar y estructurar tus aplicaciones Node.js? Construir aplicaciones que estén bien organizadas, sean probables y extensibles no siempre es fácil. A menudo puede resultar ser mucho más complicado de lo que esperas. En este evento en vivo, Matteo te mostrará cómo construye aplicaciones Node.js desde cero. Aprenderás cómo aborda el diseño de aplicaciones y las filosofías que aplica para crear aplicaciones modulares, mantenibles y efectivas.

Nivel: intermedio
Construye y Despliega un Backend con Fastify y Platformatic
JSNation 2023JSNation 2023
104 min
Construye y Despliega un Backend con Fastify y Platformatic
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic te permite desarrollar rápidamente APIs GraphQL y REST con un esfuerzo mínimo. La mejor parte es que también te permite aprovechar todo el potencial de Node.js y Fastify cuando lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y complementos adicionales. En el masterclass, cubriremos tanto nuestros módulos de código abierto como nuestra oferta en la nube:- Platformatic OSS (open-source software) — Herramientas y bibliotecas para construir rápidamente aplicaciones robustas con Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (actualmente en beta) — Nuestra plataforma de alojamiento que incluye características como aplicaciones de vista previa, métricas integradas e integración con tu flujo de Git (https://platformatic.dev/).
En este masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la nube de Platformatic.
De 0 a Autenticación en una hora con ReactJS
React Summit 2023React Summit 2023
56 min
De 0 a Autenticación en una hora con ReactJS
WorkshopFree
Kevin Gao
Kevin Gao
La autenticación sin contraseña puede parecer compleja, pero es simple de agregar a cualquier aplicación utilizando la herramienta adecuada. Hay múltiples alternativas que son mucho mejores que las contraseñas para identificar y autenticar a tus usuarios, incluyendo SSO, SAML, OAuth, Magic Links, One-Time Passwords y Authenticator Apps.
Mientras abordamos los aspectos de seguridad y evitamos errores comunes, mejoraremos una aplicación JS de pila completa (backend Node.js + frontend React) para autenticar a los usuarios con OAuth (inicio de sesión social) y One Time Passwords (correo electrónico), incluyendo:- Autenticación de usuarios - Gestión de interacciones de usuarios, devolviendo JWTs de sesión / actualización- Gestión y validación de sesiones - Almacenamiento seguro de la sesión para solicitudes de cliente posteriores, validación / actualización de sesiones- Autorización básica - extracción y validación de reclamaciones del token JWT de sesión y manejo de autorización en flujos del backend
Al final del masterclass, también exploraremos otros enfoques de implementación de autenticación con Descope, utilizando SDKs de frontend o backend.
Construyendo un Servidor Web Hiper Rápido con Deno
JSNation Live 2021JSNation Live 2021
156 min
Construyendo un Servidor Web Hiper Rápido con Deno
WorkshopFree
Matt Landers
Will Johnston
2 authors
Deno 1.9 introdujo una nueva API de servidor web que aprovecha Hyper, una implementación rápida y correcta de HTTP para Rust. El uso de esta API en lugar de la implementación std/http aumenta el rendimiento y proporciona soporte para HTTP2. En este masterclass, aprende cómo crear un servidor web utilizando Hyper en el fondo y mejorar el rendimiento de tus aplicaciones web.
0 a Auth en una Hora Usando NodeJS SDK
Node Congress 2023Node Congress 2023
63 min
0 a Auth en una Hora Usando NodeJS SDK
WorkshopFree
Asaf Shen
Asaf Shen
La autenticación sin contraseña puede parecer compleja, pero es fácil de agregar a cualquier aplicación utilizando la herramienta adecuada.
Mejoraremos una aplicación JS de pila completa (backend de Node.JS + frontend de React) para autenticar usuarios con OAuth (inicio de sesión social) y contraseñas de un solo uso (correo electrónico), incluyendo:- Autenticación de usuario - Administrar interacciones de usuario, devolver JWT de sesión / actualización- Gestión y validación de sesiones - Almacenar la sesión para solicitudes de cliente posteriores, validar / actualizar sesiones
Al final del masterclass, también tocaremos otro enfoque para la autenticación de código utilizando Flujos Descope en el frontend (flujos de arrastrar y soltar), manteniendo solo la validación de sesión en el backend. Con esto, también mostraremos lo fácil que es habilitar la biometría y otros métodos de autenticación sin contraseña.
Tabla de contenidos- Una breve introducción a los conceptos básicos de autenticación- Codificación- Por qué importa la autenticación sin contraseña
Requisitos previos- IDE de tu elección- Node 18 o superior
GraphQL: De Cero a Héroe en 3 horas
React Summit 2022React Summit 2022
164 min
GraphQL: De Cero a Héroe en 3 horas
Workshop
Pawel Sawicki
Pawel Sawicki
Cómo construir una aplicación GraphQL fullstack (Postgres + NestJs + React) en el menor tiempo posible.
Todos los comienzos son difíciles. Incluso más difícil que elegir la tecnología es desarrollar una arquitectura adecuada. Especialmente cuando se trata de GraphQL.
En este masterclass, obtendrás una variedad de mejores prácticas que normalmente tendrías que trabajar en varios proyectos, todo en solo tres horas.
Siempre has querido participar en un hackathon para poner algo en funcionamiento en el menor tiempo posible, entonces participa activamente en este masterclass y únete a los procesos de pensamiento del instructor.