Saltar al contenido principal
Si tiene Token Vault habilitado para su conexión, los tokens de acceso y de actualización ya no se almacenarán en el array identities del usuario. En su lugar, se almacenarán en un conjunto seguro de tokens dentro de Token Vault. Para habilitar Token Vault, consulte Configure Token Vault.
Una vez que haya autenticado correctamente a un usuario con un (IdP) externo, como Facebook o GitHub, el IdP suele incluir un en el perfil del usuario que devuelve a Auth0. Puede recuperar y usar este token para llamar a la API del IdP.
En este artículo se asume que ya configuró la conexión con el IdP que elija. Si no es así, vaya a Identity Providers Supported by Auth0, seleccione el IdP que desee y siga los pasos de configuración.
El proceso que seguirá varía según si su código se ejecuta en el backend o en el frontend:
  • Si su código se ejecuta en el backend, podemos asumir que su servidor es de confianza y puede almacenar secretos de forma segura (como verá, usamos un secreto en el escenario de backend). Si este es su caso, continúe en la sección de backend de este artículo.
  • Si su código se ejecuta en el frontend (por ejemplo, si se trata de una SPA o de una aplicación nativa de escritorio o móvil), su aplicación no puede almacenar credenciales de forma segura y debe seguir un enfoque alternativo. En este caso, continúe en la sección de frontend de este artículo.

Desde el backend

Una vez que autenticas a un usuario, el IdP suele incluir un Token de acceso en el perfil del usuario que devuelve a Auth0. Por motivos de seguridad y cumplimiento normativo, Auth0 no envía este token a tu aplicación como parte del perfil del usuario. Para obtenerlo, debes acceder a la de Auth0 y recuperar el perfil completo del usuario:
  1. Obtén un Token de acceso que te permita llamar a la Auth0 Management API.
  2. Llama al endpoint Get Users by ID de la Auth0 Management API con el Token de acceso obtenido en el paso 1. Este endpoint devuelve el perfil completo del usuario, que contiene el Token de acceso del IdP.
  3. Extrae el Token de acceso del IdP de la respuesta y úsalo para llamar a la API del IdP.

Paso 1: Obtener un token

Necesitarás un Token de acceso para llamar a la Management API.

Crear una aplicación de prueba para la Management API

Si es la primera vez que solicita un token de la Management API v2, deberá crear y configurar una aplicación que pueda usarse para llamar a la Management API:
  1. Vaya a Auth0 Dashboard > Applications > APIs y seleccione la Auth0 Management API.
  2. Seleccione la vista API Explorer y haga clic en Create & Authorize a Test Application.
Esto creará una nueva aplicación y concederá todos los alcances de la Management API, lo que significa que los tokens generados para esta aplicación podrán acceder a todos los endpoints de la Management API.

¿No ve el botón?

Si no ve este botón, significa que ya tiene al menos una aplicación autorizada para la Management API. En ese caso, puede actualizar los alcances de la aplicación existente y usarla, o crear una nueva siguiendo estos pasos:
  1. Vaya a Auth0 Dashboard > Applications > Applications y seleccione Create Application.
  2. Seleccione Machine to Machine Applications y luego Create.
  3. En el menú desplegable Select an API, seleccione Auth0 Management API.
  4. Habilite los alcances requeridos y seleccione Authorize.
  5. Seleccione la vista APIs y active el interruptor de Auth0 Management API.
Por motivos de seguridad, le recomendamos asignar solo los alcances necesarios a la aplicación que va a usar. Para este caso concreto, los alcances que necesita son: read:users, read:user_idp_tokens. Los alcances requeridos se indican para cada endpoint en el Management API Explorer.
Para conceder o quitar alcances de la Auth0 Management API registrada, seleccione la vista Machine to Machine Applications:
Edite los alcances concedidos a la aplicación

Obtener el token de Management API

Ya ha completado la configuración y está listo para obtener su token de Management API:
  1. En la Management API de Auth0 registrada, seleccione la vista Test.
  2. Elija su aplicación en el menú desplegable Application para rellenar automáticamente los fragmentos de código listos para usar con variables personalizadas.
  3. Elija el idioma que prefiera para el fragmento de código, cópielo y ejecútelo.
  4. Extraiga la propiedad access_token de la respuesta. Eso es lo que usará para acceder a la Management API.

¿Qué hacen los fragmentos de código?

Los fragmentos de código realizan una operación POST al endpoint /oauth/token de la Authentication API de Auth0 mediante la concesión Client Credentials de OAuth 2.0. Esta es la concesión que usan los procesos de máquina a máquina para acceder a una API. Para obtener más información sobre este flujo, consulte Client Credentials Flow.

Expiración del token

De forma predeterminada, el token que recibió vence en 24 horas (86.400 segundos). Para cambiarlo:
  1. Vaya a Auth0 Dashboard > Applications > APIs y seleccione la Auth0 Management API.
  2. Seleccione la vista Settings, busque el campo Token Expiration (Seconds), introduzca un nuevo valor y haga clic en Save. El valor máximo que puede establecer es de 2.592.000 segundos (30 días), aunque le recomendamos mantener el valor predeterminado.
El siguiente token que genere tendrá el tiempo de expiración actualizado.
Estos tokens no se pueden revocar. Para minimizar el riesgo, recomendamos emitir tokens de corta duración y conceder solo los alcances necesarios para cada aplicación. En un entorno de producción, puede configurar una CLI sencilla para obtener un token nuevo cuando caduque el anterior.

Paso 2: Obtener el perfil completo del usuario

Para obtener el perfil de un usuario, llama al endpoint Get a User de la Management API con el Token de acceso que extrajiste en la sección anterior: Reemplaza estos valores:
  • {userId}: ID del usuario para el que quieres invocar la API del IdP.
  • {yourAccessToken}: Token de acceso que extrajiste en la sección anterior.

¿Dónde encuentro el ID del usuario?

  • Para realizar pruebas, puedes encontrar un ID de usuario en Auth0 Dashboard > User Management > Users. Busca un usuario y copia el valor del campo user_id.
  • Para tu implementación, puedes extraer el ID del usuario del claim sub del ID Token, o llamar al endpoint /userinfo de la Authentication API y extraerlo de la propiedad user_id de la respuesta.

Paso 3: Extrae el Token de acceso del IdP

Puedes encontrar el Token de acceso que se usa para llamar a la API del IdP en el arreglo identities del usuario: user.identities[0].access_token.
Para ciertos Proveedores de identidad, Auth0 también almacenará un Token de actualización, que puedes usar para obtener un nuevo Token de acceso para el IdP. Esto funciona con: BitBucket, Google (OAuth 2.0), OAuth 2.0, SharePoint y Azure AD. Para obtener más información, consulta Tokens de acceso del Proveedor de identidad.
En la mayoría de los casos, el usuario solo tendrá una identidad, pero si ha iniciado sesión varias veces a través de distintas conexiones y has usado la vinculación de cuentas, puede haber más. En esta respuesta de ejemplo, vemos que nuestro usuario solo tiene una identidad: google-oauth2.
{
  "email": "john.doe@test.com",
  "email_verified": true,
  "name": "John Doe",
  "given_name": "John",
  "family_name": "Doe",
  "picture": "https://myavatar/photo.jpg",
  "gender": "male",
  "locale": "en",
  "updated_at": "2017-03-15T07:14:32.451Z",
  "user_id": "google-oauth2|111199914890750704174",
  "nickname": "john.doe",
  "identities": [
    {
      "provider": "google-oauth2",
      "access_token": "ya29.GlsPBCS6ahokDlgCYnVLnDKNE71HBXPEzNhAPoKJLAGKDSe1De3_xclahNcdZXoU-26hCpa8h6240TV86dtaEQ4ZWoeeZduHDq_yeu9QyQqUr--S9B2CR9YJrLTD",
      "expires_in": 3599,
      "user_id": "111199914890750704174",
      "connection": "google-oauth2",
      "isSocial": true
    }
  ],
  "created_at": "2017-03-15T07:13:41.134Z",
  "last_ip": "127.0.0.1",
  "last_login": "2017-03-15T07:14:32.451Z",
  "logins_count": 99
}
Ahora ya puede llamar a la API del IdP. Consulte la documentación del IdP para obtener información específica sobre cómo hacerlo.
No exponga los tokens del IdP en su aplicación del lado del cliente. Si su aplicación es pública, consulte la sección de frontend de este artículo.
Para obtener más información sobre cómo solicitar alcances específicos para un token de acceso del Proveedor de identidad, consulte Agregar alcances/permisos para llamar a las API del Proveedor de identidad.

Desde el frontend

Si está trabajando con una aplicación pública (SPA, aplicación nativa de escritorio o aplicación móvil), este es el lugar indicado. Al trabajar con una aplicación de frontend, el proceso para llamar a las API del IdP difiere del proceso de backend porque las aplicaciones de frontend son aplicaciones públicas que no pueden proteger credenciales de forma segura. Como el código de una SPA se puede ver y modificar, y las aplicaciones nativas o móviles se pueden descompilar e inspeccionar, no se puede confiar en ellas para guardar información confidencial, como claves secretas o contraseñas. En concreto, no pueden guardar de forma segura el de la aplicación de máquina a máquina, que se utiliza para llamar a /oauth/token durante el primer paso del proceso de backend. En su lugar, debe crear un proxy para su backend y exponerlo a su aplicación como una API.

Crear un proxy

Primero, crearás un proceso en tu backend que implementará los pasos incluidos en la sección del backend de este artículo y lo expondrás a tu aplicación como una API. Llamarás a la API del IdP desde ese mismo proceso del backend, para que el Token de acceso nunca quede expuesto a tu aplicación pública. Luego, llamarás a la API de tu proxy desde tu aplicación pública mediante el Authorization Code Flow with Proof Key for Code Exchange (PKCE).

Muéstrame cómo

Si no has implementado esto antes, puede que te resulte útil nuestro escenario de arquitectura Single-page Applications (SPA) with API. Cubre un caso diferente, pero explica cómo configurar Auth0, cómo llamar a una API desde una SPA y cómo implementar validaciones de la API. Incluye un ejemplo que usa Angular 2 y Node.js.También ofrecemos una variante de Mobile Applications with API (el ejemplo usa Android y Node.js).