> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Describe cómo crear una aserción para usar la autenticación mediante Private Key JWT.

# Autenticación con Private Key JWT

<Card title="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](/es/docs/get-started/applications/configure-private-key-jwt).
</Card>

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](/es/docs/get-started/applications/configure-private-key-jwt).
2. Use la aserción para autenticarse en Auth0.

<div id="build-the-assertion">
  ## Crear la aserción
</div>

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 <Tooltip tip="JSON Web Token (JWT): Formato estándar de ID Token (y, a menudo, de Token de acceso) que se usa para representar claims de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=JSON+Web+Token">JSON Web Token</Tooltip> (JWT) que debe contener las siguientes propiedades y claims:

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  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](/es/docs/secure/tokens/json-web-tokens/json-web-token-claims).
</Callout>

* 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](https://manage.auth0.com/dashboard/#/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](https://manage.auth0.com/dashboard/#/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.

    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      Si ha configurado un dominio personalizado para su inquilino de Auth0, puede usarlo como claim `aud`. En ese caso, recomendamos usar el dominio personalizado.
    </Callout>
  * `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).

    <Warning>
      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.
    </Warning>

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](https://www.rfc-editor.org/rfc/rfc7519#section-7.1).

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](https://jwt.io/libraries).

<div id="example">
  ### Ejemplo
</div>

En el ejemplo siguiente, el script de Node.js usa el paquete [jose](https://github.com/panva/jose) para generar la aserción:

```javascript lines expandable theme={null}
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:

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4O8zb1gZnEmUQ6FrRkfmlc/a30b73e09d51ca0b4bf929b91571a80a/2023-03-13_16-53-54.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=bff6788a805adfd75607532c7cb8556f" alt="private key example" width="1256" height="400" data-path="docs/images/cdy7uua7fh8z/4O8zb1gZnEmUQ6FrRkfmlc/a30b73e09d51ca0b4bf929b91571a80a/2023-03-13_16-53-54.png" />
</Frame>

Corresponde a lo siguiente:

```json lines theme={null}
{
  "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.

<div id="exchange-assertion-for-access-tokens">
  ## Intercambiar una aserción por tokens de acceso
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  El siguiente ejemplo usa el [flujo de credenciales de cliente](/es/docs/get-started/authentication-and-authorization-flow/client-credentials-flow). 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`.
</Callout>

Para intercambiar la aserción JWT por un <Tooltip tip="Token de acceso: credencial de autorización, en forma de una cadena opaca o JWT, utilizada para acceder a una API." cta="Ver glosario" href="/es/docs/glossary?term=access+token">token de acceso</Tooltip>, llama al [endpoint de token](https://auth0.com/docs/api/authentication#authenticate-user) de la API de autenticación con los siguientes parámetros:

* `$client_assertion`: aserción JWT
* `$resource_server_identifier`: identificador del <Tooltip tip="Servidor de recursos: servidor que aloja recursos protegidos. Los servidores de recursos aceptan y responden a solicitudes de recursos protegidos." cta="Ver glosario" href="/es/docs/glossary?term=resource+server">servidor de recursos</Tooltip>. Para obtener más información, consulta [Registrar APIs](/es/docs/get-started/auth0-overview/set-up-apis).

```bash lines theme={null}
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'
```

<div id="supported-endpoints">
  ## Endpoints admitidos
</div>

Además del endpoint [https://\$tenant/oauth/token](https://auth0.com/docs/api/authentication#get-token), los siguientes endpoints de la API de autenticación de Auth0 admiten la autenticación `private_key_jwt` para las aplicaciones configuradas:

* [POST /oauth/revoke](https://auth0.com/docs/api/authentication#revoke-refresh-token)
* [POST /mfa/challenge](https://auth0.com/docs/api/authentication#challenge-request)
* [POST /passwordless/start](https://auth0.com/docs/api/authentication#get-code-or-link)

<div id="assertion-limits">
  ## Límites de la aserción
</div>

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

<div id="learn-more">
  ## Más información
</div>

* [Configurar la autenticación con Private Key JWT](/es/docs/get-started/applications/configure-private-key-jwt)
* [Autenticación de cliente con Private Key JWT para conexiones de Okta y OIDC](/es/docs/authenticate/enterprise-connections/private-key-jwt-client-auth)
