Para simplificar, mantendremos la implementación centrada exclusivamente en la autenticación y la autorización. Como verá en los ejemplos, el registro de horas de entrada estará definido de forma fija en el código, y la API no persistirá ese registro. En su lugar, simplemente devolverá parte de la información.
Definir los endpoints de la API
¿Qué es un endpoint de API?
Un endpoint de API es una URL única que representa un objeto. Para interactuar con este objeto, la aplicación debe apuntar a su URL. Por ejemplo, si tuviera una API que pudiera devolver pedidos o clientes, podría configurar dos endpoints:
/orders y /customers. La aplicación interactuaría con estos endpoints mediante distintos métodos HTTP; por ejemplo, POST /orders podría crear un pedido nuevo o GET /orders podría recuperar el conjunto de datos de uno o más pedidos.HTTP GET al endpoint /timesheets permitirá que un usuario recupere sus registros de horas, y una solicitud HTTP POST al endpoint /timesheets permitirá que un usuario agregue un nuevo registro de horas.
Consulte la implementación en Node.js
Proteger los endpoints
Missing or invalid token para la aplicación que realiza la llamada.
Las validaciones que debe realizar la API son:
- Verificar que el tenga un formato válido
- Verificar la firma
- Validar los claims estándar
JWT.io proporciona una lista de bibliotecas que pueden hacer la mayor parte del trabajo por usted: analizar el JWT y verificar la firma y los claims.
Comprobar los permisos del cliente
Determinar la identidad del usuario
sub, que identifica al principal que es el sujeto de la claim. En el caso del flujo Implicit Grant, esta claim contendrá la identidad del usuario, que será el identificador único del usuario de Auth0. Puede usarla para asociar cualquier información en sistemas externos con un usuario concreto.
También puede usar una claim personalizada para agregar otro atributo del usuario, como su correo electrónico, al Token de acceso y usarlo para identificar de forma única al usuario.
Consulte la implementación en Node.js
Implementa la aplicación móvil
code_challenge y el método utilizado para generarlo:
La solicitud GET a la URL de autorización debe incluir los siguientes valores:
| Parameter | Description |
|---|---|
| client_id | El valor de tu ID de cliente de Auth0. Puedes obtenerlo en la configuración de tu aplicación en el Auth0 Dashboard. |
| audience | El valor del identificador de tu API. Puedes obtenerlo en la configuración de tu API en el Auth0 Dashboard. |
| scope | Los alcances que determinan los claims que se devolverán en el ID Token y el token de acceso. Por ejemplo, un scope de openid devolverá un ID Token en la respuesta. En nuestra aplicación móvil de ejemplo, usamos los siguientes alcances: create:timesheets read:timesheets openid profile email offline_access. Estos alcances permiten que la aplicación móvil llame a la API, obtenga un Token de actualización y devuelva los claims name, picture y email del usuario en el ID Token. |
| response_type | Indica el flujo de autenticación que se debe usar. En una aplicación móvil que usa PKCE, debe establecerse en code. |
| code_challenge | El desafío de código generado a partir del verificador de código. Puedes encontrar instrucciones para generar un desafío de código aquí. |
| code_challenge_method | Método utilizado para generar el desafío. Auth0 solo admite S256. |
| redirect_uri | La URL a la que Auth0 redirigirá el navegador después de que el usuario haya otorgado la autorización. El código de autorización estará disponible en el parámetro de URL code. Esta URL debe especificarse como una URL de callback válida en la configuración de tu aplicación. |
Obtener las credenciales
authorization_code de la respuesta por un Token de acceso que puedes usar para llamar a tu API. Realiza una solicitud POST a la URL del token e incluye los siguientes datos:
| Parámetro | Descripción |
|---|---|
| grant_type | Debe establecerse como authorization_code. |
| client_id | El valor de tu ID de cliente de Auth0. Puedes obtenerlo en la sección Settings de tu aplicación en el Auth0 Dashboard. |
| code_verifier | Clave aleatoria criptográficamente segura que se utilizó para generar el code_challenge enviado a la URL de autorización (/authorize). |
| code | El authorization_code recibido de la llamada anterior a authorize. |
| redirect_uri | La URL debe coincidir con el redirect_uri enviado en la sección anterior a /authorize. |
- access_token: Un Token de acceso para la API, especificado por
audience. - refresh_token: Un Token de actualización solo estará presente si incluyó el scope
offline_accessy habilitó Permitir acceso sin conexión para su API en el Dashboard. - id_token: Un JWT que contiene información del perfil del usuario.
- token_type: Una cadena que contiene el tipo de token; siempre será un token Bearer.
- expires_in: La cantidad de segundos hasta que expire el Token de acceso.
Obtener el perfil del usuario
Mostrar elementos de la IU de forma condicional según el scope
scope del usuario, es posible que quiera mostrar u ocultar determinados elementos de la IU. Para determinar el scope emitido para un usuario, deberá inspeccionar el scope que se concedió cuando el usuario se autenticó. Será una cadena que contiene todos los alcances, por lo que deberá comprobar si esa cadena contiene el scope requerido y, en función de ello, decidir si mostrar un elemento concreto de la IU.
Consulte la implementación en Android
Llamar a la API
Authorization mediante el esquema Bearer.
Consulta la implementación en Android.
Renovar el token
POST al endpoint /oauth/token con el de su resultado de autorización.
Un Token de actualización solo estará presente si incluyó el scope offline_access en la solicitud de autorización anterior y habilitó Allow Offline Access para su API en el Dashboard.
Su solicitud debe incluir:
| Parámetro | Descripción |
|---|---|
| grant_type | Debe establecerse en refresh_token. |
| client_id | El valor de su ID de cliente de Auth0. Puede recuperarlo en la sección Settings de su aplicación en el Auth0 Dashboard. |
| refresh_token | el Token de actualización que se usará, obtenido del resultado de autenticación anterior. |