Paso 1. Define el endpoint de la API
Cree un archivo package.json
npm init. Esto generará el archivo package.json.
Puede dejar la configuración predeterminada o cambiarla según le convenga.
El archivo package.json de nuestro ejemplo es el siguiente:
Instale las dependencias
- express: Este módulo agrega el framework web Express.
- jwks-rsa: Esta biblioteca recupera claves de firma RSA desde un endpoint JWKS (JSON Web Key Set). Mediante
expressJwtSecret, podemos generar un proveedor de secretos que proporcionará la clave de firma correcta aexpress-jwten función delkiddel encabezado . Para obtener más información, consulte el repositorio de GitHub de node-jwks-rsa. - express-jwt: Este módulo le permite autenticar solicitudes HTTP mediante tokens JWT en sus aplicaciones de Node.js. Proporciona varias funciones que facilitan el trabajo con JWT. Para obtener más información, consulte el repositorio de GitHub de express-jwt.
- body-parser: Este es un middleware de análisis del cuerpo para Node.js. Extrae por completo el cuerpo de un flujo de solicitud entrante y lo expone en
req.bodyde una forma más fácil de usar. Para obtener más información y varias alternativas, consulte el repositorio de GitHub de body-parser.
Implementa el endpoint
server.js. Tu código debe:
- Configurar las dependencias.
- Habilitar el middleware para analizar el cuerpo de la solicitud.
- Implementar el endpoint.
- Iniciar el servidor de la API.
node server y haga una solicitud HTTP POST a localhost:8080/timesheets/upload. Debería ver una respuesta JSON con el mensaje This is the POST /timesheets/upload endpoint.
Ahora ya tenemos el endpoint, pero cualquiera puede llamarlo. Continúe con el siguiente párrafo para ver cómo podemos solucionarlo.
Paso 2. Proteger el endpoint de la API
jwt, proporcionada por el middleware express-jwt, y el paquete jwks-rsa para obtener la clave pública de Auth0. Estas bibliotecas hacen lo siguiente:
express-jwtdecodificará el token y pasará la solicitud, el encabezado y la carga útil ajwksRsa.expressJwtSecret.jwks-rsadescargará entonces todas las claves de firma del endpoint JWKS y comprobará si alguna de ellas coincide con elkiddel encabezado del JWT. Si ninguna de las claves de firma coincide con elkidrecibido, se generará un error. Si hay coincidencia, pasaremos la clave de firma correcta aexpress-jwt.express-jwtcontinuará con su propia lógica para validar la firma del token, la expiración, laaudiencey elissuer.
- Crear la función de middleware para validar el .
- Habilitar el uso del middleware en nuestras rutas.
localhost:8080/timesheets/upload, deberíamos recibir el mensaje de error Missing or invalid token (lo cual es perfectamente normal, ya que no enviamos ningún token de acceso en la solicitud).
Para probar también el escenario correcto, necesitamos:
- Obtener un token de acceso. Para obtener más información sobre cómo hacerlo, consulta: Obtener un token de acceso
- Invocar la API añadiendo un encabezado
Authorizationa la solicitud con el valorBearer ACCESS_TOKEN(dondeACCESS_TOKENes el valor del token que obtuvimos en el primer paso).
Paso 3. Verifique los permisos del cliente
scope) para usar nuestro endpoint y subir una hoja de horas. En concreto, queremos asegurarnos de que el token tenga el scope correcto, que es batch:upload.
Para ello, usaremos el paquete de Node.js express-jwt-authz, así que agréguelo a su proyecto:
jwtAuthz(...) a tu middleware para asegurarte de que el JWT contenga un scope determinado antes de ejecutar un endpoint concreto. Esta es nuestra implementación de ejemplo (se omite parte del código por brevedad):
403. Puede comprobarlo eliminando este scope de su API.
¡Eso es todo! ¡Ha terminado!