1 Defina los endpoints de la API
1 Defina los endpoints de la API
Esta implementación usa el framework web Express para crear una API de Node.js.Inicie su servidor de API con
Crear un archivo package.json
Cree una carpeta para su API, acceda a ella y ejecutenpm init. Esto configura el archivo package.json.Deje la configuración predeterminada o cámbiela según le convenga.El archivo package.json de nuestro ejemplo es similar al siguiente:Instala las dependencias
A continuación, configura las dependencias con los siguientes módulos:- express: Este módulo añade el framework de aplicaciones web Express.
- cors: Este módulo añade compatibilidad con CORS, lo cual es necesario porque se llama a la API desde una aplicación de una sola página que se ejecuta en un dominio diferente dentro de un navegador web.
- jwks-rsa: Esta biblioteca recupera claves de firma RSA desde un endpoint de JWKS (JSON Web Key Set). Con
expressJwtSecret, podemos generar un proveedor de secretos que proporciona la clave de firma correcta aexpress-jwten función delkiddel encabezado del JWT. Para obtener más información, consulta el repositorio de GitHub de node-jwks-rsa. - express-jwt: Este módulo autentica solicitudes HTTP mediante tokens JWT en tus aplicaciones de Node.js. Proporciona varias funciones que facilitan el trabajo con JWT. Para obtener más información, consulta el repositorio de GitHub de express-jwt.
- body-parser: Este es un middleware de análisis del cuerpo de solicitudes para Node.js. Extrae todo el contenido del cuerpo de un flujo de solicitud entrante y lo expone en
req.bodyde una forma más fácil de usar.
Implementa los endpoints
Ve al directorio de tu API y crea un archivoserver.js. Tu código debe:- Instalar las dependencias.
- Implementar el endpoint o los endpoints.
- Iniciar el servidor de la API.
node server y haga una solicitud HTTP POST a localhost:8080/timesheets. Debería ver una respuesta JSON con el mensaje This is the POST /timesheets endpoint.Ahora ya tenemos nuestro endpoint, pero cualquiera puede llamarlo. Continúe con el siguiente paso para ver cómo podemos corregir esto.2 Proteja los endpoints de la API
2 Proteja los endpoints de la API
Para validar nuestro token, use la función
jwt, proporcionada por el middleware express-jwt, y jwks-rsa para recuperar nuestro secreto. Las bibliotecas hacen lo siguiente:express-jwtdecodifica el token y pasa la solicitud, el encabezado y la carga útil ajwksRsa.expressJwtSecret.jwks-rsadescarga todas las claves de firma del endpoint JWKS y comprueba si alguna coincide con elkiddel encabezado del JWT. Si ninguna de las claves de firma coincide con elkidrecibido, se generará un error. Si hay coincidencia, pasa la clave de firma correcta aexpress-jwt.express-jwtcontinúa con su propia lógica para validar la firma del token, la expiración,audiencey elissuer.
- Crear la función de middleware para validar el token de acceso.
- Habilitar el uso del middleware en nuestras rutas.
localhost:8080/timesheets, deberíamos obtener el mensaje de error Missing or invalid token (lo cual es correcto, ya que no enviamos un token de acceso en nuestra solicitud).Para probar también el caso en que funciona correctamente, necesitamos:- Obtener un token de acceso. Para obtener más detalles sobre cómo hacerlo, consulte: Get an Access Token.
- Invocar la API agregando a la solicitud un encabezado
Authorizationcon el valorBearer ACCESS_TOKEN(dondeACCESS_TOKENes el valor del token que recuperamos en el primer paso).
3 Compruebe los permisos de la aplicación
3 Compruebe los permisos de la aplicación
En este paso, agregamos la capacidad de comprobar si la aplicación tiene permisos (o alcances) y de usar nuestro endpoint para crear una hoja de horas. En particular, queremos asegurarnos de que el token tenga el scope correcto, que es Ahora, agregue una llamada a Si invocamos nuestra API con un token que no incluye este scope, deberíamos recibir el mensaje de error Forbidden con el código de estado HTTP
batch:upload.Para ello, usamos el paquete de Node.js express-jwt-authz, así que agrégalo a tu proyecto:jwtAuthz(...) en su middleware para asegurarse de que el JWT contenga un scope determinado para poder ejecutar un endpoint concreto.Agregamos una dependencia adicional. La biblioteca express-jwt-authz, que se usa junto con express-jwt, valida el JWT y garantiza que incluya los permisos correctos para llamar al endpoint deseado. Para obtener más información, consulte el repositorio de GitHub de express-jwt-authz.Esta es nuestra implementación de ejemplo (se omite parte del código por brevedad):403. Puedes comprobarlo eliminando este scope de tu API.4 Determinar la identidad del usuario
4 Determinar la identidad del usuario
El middleware
express-jwt que se utiliza para validar el JWT también asigna req.user con la información contenida en el JWT. Si desea usar el claim sub para identificar al usuario de forma única, puede usar req.user.sub. Para la aplicación de registro de horas, queremos usar la dirección de correo electrónico del usuario como identificador único.Crear una Action
Primero, cree una nueva Action que agregará la dirección de correo electrónico del usuario al token de acceso.- Vaya a Auth0 Dashboard > Actions > Library y seleccione Build Custom.
-
Introduzca un Nombre descriptivo para su Action (por ejemplo,
Add email to access token), seleccione el trigger Login / Post Login y seleccione Create. -
Busque el editor de código de Actions, copie el siguiente código JavaScript en él y seleccione Save Draft para guardar los cambios:
El
namespacese utiliza para garantizar que el claim tenga un nombre único que no entre en conflicto con los claims estándar de OIDC ni con los servicios internos. Para obtener más información sobre las restricciones y directrices de los claims con y sin espacio de nombres, lea Create Custom Claims. - En la barra lateral del editor de código de Actions, seleccione Test (icono de reproducción) y luego seleccione Run para probar su código.
- Cuando la Action esté lista para publicarse, seleccione Deploy.
Agregar su Action al trigger Post-Login
A continuación, agregue la Action que creó al trigger Post-Login. Para obtener información sobre cómo adjuntar Actions a triggers, lea Write Your First Action.Recuperar el identificador único
Por último, desde su API, recupere el valor del claim desdereq.auth. Use ese valor como identificador único del usuario para asociarlo con las entradas de registro de horas.