Saltar al contenido principal

Antes de comenzar

Debe crear una nueva aplicación en Auth0 Dashboard o convertir una aplicación existente antes de continuar. Para obtener más información, consulte Configure Private Key JWT Authentication.
Debe completar dos pasos para autenticarse con private_key_jwt:
  1. Cree la aserción del cliente. Esta aserción es un JWT firmado con la clave privada que generó al crear el par de claves. Para saber cómo generar un par de claves, consulte Configure Private Key JWT Authentication.
  2. Use la aserción para autenticarse en Auth0.

Crear la aserción

Puede usar uno de los SDK de Auth0 para crear una aserción automáticamente. Si no usa nuestros SDK, tendrá que crear la aserción usted mismo. La aserción es un (JWT) que debe contener las siguientes propiedades y claims:
Todos los claims son obligatorios, salvo que se indique lo contrario. Para obtener más información sobre los claims de JWT, consulte Claims de JSON Web Token.
  • Encabezado
    • alg: El algoritmo usado para firmar la aserción. El algoritmo debe coincidir con el especificado cuando creó la credencial de su aplicación.
    • kid: (opcional) El kid de la credencial generado por Auth0. El kid se crea cuando se crea la credencial.
  • Carga útil
    • iss: El ID de cliente de su aplicación. Puede encontrar este valor en la configuración de su aplicación, en Auth0 Dashboard > Applications > Applications, y seleccionar la pestaña Settings.
    • sub: El ID de cliente de su aplicación. También puede encontrar este valor en la configuración de su aplicación. Puede encontrar este valor en la configuración de su aplicación, en Auth0 Dashboard > Applications > Applications, y seleccionar la pestaña Settings.
    • aud: La URL del inquilino de Auth0 o del dominio personalizado que recibe la aserción. Por ejemplo: https://{yourTenant}.auth0.com/. Incluya la barra diagonal final.
      Si ha configurado un dominio personalizado para su inquilino de Auth0, puede usarlo como claim aud. En ese caso, recomendamos usar el dominio personalizado.
    • iat (opcional), nbf (opcional) y exp: claims Issued At, Not Before y Expiration establecidos con las marcas de tiempo correctas. Se permite una desviación del reloj de hasta 10 segundos para iat y nbf (si están presentes) para garantizar la interoperabilidad. La aserción de cliente es un token de un solo uso, y recomendamos el tiempo de expiración más corto posible. Auth0 admite un máximo de 5 minutos como tiempo de vida de un token.
    • jti: Un ID de claim único creado por el cliente. Recomendamos usar el formato Universally Unique Identifier (UUID).
      Este JWT es un token de un solo uso y debe tratarse como tal, con una expiración corta. Recomendamos establecer un máximo de 1 minuto.
Luego, el token debe firmarse con la clave privada que generó cuando creó o configuró su aplicación para la autenticación Private Key JWT. Para saber cómo hacerlo, consulte la especificación de JSON Web Token. Le recomendamos generar el token con herramientas estándar o bibliotecas de terceros que admitan esta funcionalidad de forma inmediata, en lugar de implementarla usted mismo desde cero.  Para obtener más información sobre las bibliotecas compatibles, consulte la lista en JWT.io.

Ejemplo

En el ejemplo siguiente, el script de Node.js usa el paquete jose para generar la aserción:
const { SignJWT } = require('jose')
const crypto = require("crypto");
const uuid = require("uuid");

async function main() {
 const privateKeyPEM = crypto.createPrivateKey(/**
   Lee el contenido de tu clave privada aquí. Recomendamos almacenar tu clave privada
   en una infraestructura segura. 
 */);

 const jwt = await new SignJWT({})
   .setProtectedHeader({ 
      alg: 'RS256', // o RS384 o PS256
      kid: '(OPTIONAL) KID_GENERATED_BY_AUTH0' 
   })
   .setIssuedAt()
   .setIssuer('CLIENT_ID')
   .setSubject('CLIENT_ID')
   .setAudience('https://YOUR_TENANT.auth0.com/') // o tu CUSTOM_DOMAIN
   .setExpirationTime('1m')
   .setJti(uuid.v4())
   .sign(privateKeyPEM);
  console.log(jwt)
}

main();
Ejemplo de una aserción de cliente firmada con una clave privada:
private key example
Corresponde a lo siguiente:
{
  "alg": "RS256",
  "kid": "my kid"
}
{
  "iat": 1626684584,
  "iss": "my client id",
  "sub": "my client id",
  "aud": "https://mytenant.auth0.com/",
  "exp": 1626684644,
  "jti": "e4dc8ed1-b108-4901-8bbc-c07a791817e7"
}
Después de generar el JWT con la información requerida, ya puede autenticar su aplicación en Auth0.

Intercambiar una aserción por tokens de acceso

El siguiente ejemplo usa el flujo de credenciales de cliente. La autenticación con Private Key JWT puede usarse con otros tipos de concesión que también permiten sustituir client_secret por client_assertion.
Para intercambiar la aserción JWT por un , llama al endpoint de token de la API de autenticación con los siguientes parámetros:
  • $client_assertion: aserción JWT
  • $resource_server_identifier: identificador del . Para obtener más información, consulta Registrar APIs.
curl --location --request POST 'https://$tenant/oauth/token' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=client_credentials' \
  --data-urlencode 'client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer' \
  --data-urlencode 'client_assertion=$client_assertion' \
  --data-urlencode 'audience=$resource_server_idenifier'

Endpoints admitidos

Además del endpoint https://$tenant/oauth/token, los siguientes endpoints de la API de autenticación de Auth0 admiten la autenticación private_key_jwt para las aplicaciones configuradas:

Límites de la aserción

La longitud máxima de la aserción JWT es de 2048 bytes. Los claims de la aserción tienen los siguientes límites:
  • iss: 64 caracteres
  • sub: 64 caracteres
  • jti: 64 caracteres
  • alg: 16 caracteres

Más información