Saltar al contenido principal
En esta sección del tutorial, profundizaremos en nuestra API y en la aplicación Machine-to-Machine asociada. Para comenzar desde el principio, lee Aplicaciones de servidor con API.
Para simplificar, mantendremos nuestra implementación centrada únicamente en la autenticación y la autorización. Como verás en los ejemplos, la entrada del registro de horas estará codificada de forma fija y la API no la conservará. En su lugar, se limitará a devolver parte de la información.

Defina los endpoints de la API

Un endpoint de API es un URI estático que representa un recurso (colección de datos). Por ejemplo, una API de restaurante podría tener endpoints como /orders y /customers. Una aplicación que se conecta a esta API puede realizar operaciones CRUD (crear, leer, actualizar y eliminar) al llamar a un endpoint de API con el método HTTP asociado (POST, GET, PUT, PATCH o DELETE). Para la API de registros de horas de ExampleCo, deberá configurar un endpoint para crear registros de horas.
Método HTTPendpoint de APIDescripción
POST/timesheets/uploadCrea un nuevo registro de horas
{
  'user_id': '007',
  'date': '2017-05-10T17:40:20.095Z',
  'project': 'StoreZero',
  'hours': 5
}
Si la API procesa la solicitud correctamente, envía una respuesta con el código de estado HTTP 201 Created y un cuerpo que contiene un objeto JSON con una propiedad message que describe el registro de horas recién creado:
{
"message": "Created timesheet 14 for employee 007."
}
Consulta la implementación en Node.js.

Protege los endpoints de la API

Para proteger los endpoint(s) de tu API, debes implementar una función de middleware en tu aplicación de API para gestionar los tokens. Esta función comprueba si se incluyó un token en la solicitud a la API, valida el token y luego confirma si se incluyen los alcances necesarios para realizar la acción solicitada. Si se cumplen todos los criterios, la aplicación de API responde con el mensaje mencionado anteriormente. Si hay algún problema con el proporcionado (o no se proporciona en absoluto), la aplicación de API envía una respuesta con el código de estado HTTP 401 Unauthorized. Consulta la implementación en Node.js.

Obtener un token de acceso

Para obtener un token de acceso sin usar la implementación de ejemplo de nuestra aplicación, llama al endpoint Get Token de la API de autenticación de Auth0 con la siguiente carga útil:
{
  audience: "{yourApiIdentifier}",
  grant_type: "client_credentials",
  client_id: "${account.client_id}",
  client_secret: "${account.client_secret}"
}

Compruebe los permisos de la aplicación

Ahora hemos protegido el endpoint de nuestra API con un token de acceso, pero aún no nos hemos asegurado de que el proceso que llama a la API tenga los permisos necesarios para publicar una nueva entrada de registro de horas. Como se explicó antes, cada token de acceso puede incluir una lista de los permisos que se han concedido a la aplicación. Estos permisos se definen mediante el parámetro de solicitud scope. Para obtener más información sobre cómo configurarlos, consulte el apartado Configurar los alcances. Para nuestro endpoint, requeriremos el alcance batch:upload. Consulte la implementación en Node.js.

Implementa la aplicación Machine-to-Machine

En esta sección, veremos cómo implementar una aplicación Machine-to-Machine en nuestro caso.

Obtener un token de acceso

Comenzaremos invocando el endpoint de la API /oauth/token de Auth0 para obtener un token de acceso. Para ello, necesitaremos los siguientes valores de configuración, que puede encontrar en la configuración de la aplicación:
  • Dominio: el dominio de Auth0 y también el identificador de su inquilino. Este valor formará parte de la URL de la API: https://{yourTenant}/oauth/token.
  • : identificador de la API.
  • : ID de cliente de la aplicación de Auth0.
  • : Secreto del cliente de la aplicación de Auth0.
Nuestra implementación debe realizar una operación POST en el endpoint https://{yourDomain}/oauth/token con una carga útil en el siguiente formato:
{
  "audience": "{yourApiIdentifier}",
  "grant_type": "client_credentials",
  "client_id": "${account.client_id}",
  "client_secret": "${account.client_secret}"
}
Para obtener más información, consulte Cómo llamar a su API mediante el flujo de credenciales del cliente. Consulte la implementación en Python.

Invocar la API

Ahora que tenemos un token de acceso que incluye los alcances válidos, podemos invocar nuestra API. Para ello, haremos lo siguiente:
  • Crear una entrada de registro de horas codificada manualmente en formato JSON.
  • Agregar el token de acceso a la solicitud como encabezado Authorization.
  • Realizar la solicitud HTTP POST.
  • Analizar la respuesta e imprimirla en la terminal (opcional).
Consulte la implementación en Python.