> ## 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 configurar aplicaciones nuevas y existentes para usar la autenticación con Private Key JWT.

# Configurar la autenticación con Private Key JWT

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Private Key JWT está disponible para clientes con el plan Enterprise. Para actualizar tu plan, ponte en contacto con [Auth0 pricing](https://auth0.com/pricing/).
</Callout>

La autenticación con Private Key <Tooltip tip="JSON Web Token (JWT): formato estándar de ID Token (y, a menudo, de Token de acceso) que se utiliza para representar claim de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=JWT">JWT</Tooltip> admite la autenticación de cliente de [OIDC Connect Core Client Authentication 1.0](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication) mediante aserciones JWT firmadas con pares de claves asimétricas. Puedes crear una aplicación nueva para usar `private_key_jwt` o habilitar aplicaciones existentes para que usen pares de claves para la autenticación.

<div id="prerequisites">
  ## Requisitos previos
</div>

Antes de configurar una aplicación que se autentica mediante Private Key JWT, debe [generar un par de claves RSA](/es/docs/secure/application-credentials/generate-rsa-key-pair).

<div id="configure-private-key-jwt">
  ## Configurar Private Key JWT
</div>

<Tabs>
  <Tab title="Auth0 Dashboard">
    Puede usar el Auth0 Dashboard para crear una aplicación nueva y configurar las credenciales, o actualizar una aplicación existente.

    Le recomendamos almacenar de forma segura el parámetro `client_secret` actual antes de cambiar el método de credenciales de su aplicación a Private Key JWT. El parámetro `client_secret` quedará oculto una vez que se complete la configuración de Private Key JWT.

    #### Configurar una aplicación nueva para `private_key_jwt`

    1. Vaya a [**Auth0 Dashboard > Applications > Application**](https://manage.auth0.com/#/applications).
    2. Seleccione **Create Application**.
    3. Elija el tipo de aplicación.
    4. En la configuración de la aplicación, seleccione la pestaña **Credentials**.
    5. En **Authentication Methods**, seleccione **Private Key JWT**.

           <Frame>
             <img src="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/33kfi48tkbMIOQJ8PBxj76/5b79ffda11ad58b27128068057e6e05c/Default_App_-_Creds_-_English.png?fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=a9de550257ed5da2f82681751b4d3e12" alt="Configurar la autenticación con Private Key JWT: instrucciones del Auth0 Dashboard" width="1102" height="1197" data-path="docs/images/cdy7uua7fh8z/33kfi48tkbMIOQJ8PBxj76/5b79ffda11ad58b27128068057e6e05c/Default_App_-_Creds_-_English.png" />
           </Frame>
    6. Configure los detalles de la credencial:

       1. Introduzca un nombre para la credencial.
       2. Cargue su certificado en formato PEM o X.509.
       3. Seleccione el algoritmo para firmar las aserciones.
       4. Opcional: habilite una fecha de vencimiento personalizada. Seleccione **Set an explicit expiry date for this Credential** y establezca una fecha futura.

              <Warning>
                Puede recibir un error de certificado no válido si envía material de clave mal formado. Para evitar problemas, lo mejor es cargar directamente el archivo creado por OpenSSL.
              </Warning>
    7. Seleccione **Add Credential**.

    #### Configurar una aplicación existente

    1. Vaya a [Auth0 Dashboard > Applications](http://manage.auth0.com/#/applications).
    2. Seleccione la aplicación que desea actualizar.
    3. Seleccione la pestaña **Credentials**.
    4. Elija **Private Key JWT**.
    5. Configure los detalles de la credencial:

       1. Introduzca un nombre para la credencial.
       2. Cargue su certificado en formato PEM o X.509.
       3. Seleccione el algoritmo para firmar las aserciones.
       4. Opcional: habilite una fecha de vencimiento personalizada. Seleccione **Set an explicit expiry date for this Credential** y establezca una fecha futura.
    6. Seleccione **Add Credential**.

    #### Configurar una aplicación para usar la autenticación con Secreto del cliente

    1. Vaya a [Auth0 Dashboard > Applications > Applications](https://manage.auth0.com/dashboard/#/applications/) y seleccione la aplicación que desea actualizar.
    2. Seleccione la pestaña **Credentials**.
    3. Elija **Client Secret (Post)** o **Client Secret (Basic)**.
    4. Seleccione **Save**.

    #### Actualizar el vencimiento de la credencial

    Puede actualizar la fecha de vencimiento de una credencial existente desde Auth0 Dashboard.

    1. Vaya a [Auth0 Dashboard > Applications > Applications](https://manage.auth0.com/dashboard/#/applications/) y seleccione la aplicación que desea actualizar.
    2. Seleccione la pestaña **Credentials**.
    3. Elija la credencial que desea actualizar y seleccione **Edit Credential**.

           <Frame>
             <img src="https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6858PTDkNCRZiIqtBVmciZ/ec25a602cfae5a0a5cf38049d050ceaa/Demo_Key2_-_English.png?fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=8338149f839eecd3923bbf1836f2e526" alt="Dashboard - Applications - configuración de la aplicación - Credentials - actualizar fecha de vencimiento" width="1102" height="383" data-path="docs/images/cdy7uua7fh8z/6858PTDkNCRZiIqtBVmciZ/ec25a602cfae5a0a5cf38049d050ceaa/Demo_Key2_-_English.png" />
           </Frame>
    4. Seleccione **Set an explicit expiry date for this Credential** y establezca una fecha futura.
    5. Seleccione **Update Credential**.
  </Tab>

  <Tab title="Management API">
    #### Configurar una nueva aplicación para `private_key_jwt`

    Puedes crear una nueva aplicación con `private_key_jwt` como método de autenticación mediante la Management API. Realiza una llamada `POST` al endpoint [`Create a Client`](https://auth0.com/docs/api/management/v2#!/Clients/get_clients) con la siguiente carga útil:

    ```bash lines theme={null}
    curl --location --request POST 'https://{domain}/api/v2/clients' \
      --header 'Authorization: Bearer {managementApiAccessToken} \
      --header 'Content-Type: application/json' \
      --data-raw '{
     "name": "{clientName}",
     "app_type": "non_interactive",
     "client_authentication_methods": {
       "private_key_jwt": {
         "credentials": [
           { 
              "name": "{credentialName}", 
              "credential_type": "public_key", 
              "pem": "{credentialPublicKey}",
              "alg": "{algorithm}",
              "expires_at": "{expiresAt}"
           }
         ]
       },
       "jwt_configuration": {
         "alg": "RS256"
       }
     }
    }'
    ```

    | Parámetro                  | Descripción                                                                                                                                                                                                                                                                                               |
    | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `algorithm`                | Algoritmo utilizado para firmar aserciones. Los valores admitidos son RS256, RS384 y PS256. Si no se especifica, se usará RS256 de forma predeterminada.                                                                                                                                                  |
    | `clientName`               | Nombre para el nuevo cliente.                                                                                                                                                                                                                                                                             |
    | `credentialName`           | Nombre para la clave pública.                                                                                                                                                                                                                                                                             |
    | `expires_at`               | Opcional. Fecha de vencimiento de la credencial en formato ISO 8601. Por ejemplo, `2020-08-20T19:10:06.299Z`. Una vez pasada la fecha de vencimiento, la credencial deja de ser válida.                                                                                                                   |
    | `managementApiAccessToken` | [Token de acceso para Management API](/es/docs/secure/tokens/access-tokens/management-api-access-tokens) con el scope `create:credentials`.                                                                                                                                                               |
    | `pem`                      | Clave pública o certificado X.509 codificado en formato PEM.                                                                                                                                                                                                                                              |
    | `parse_expiry_from_cert`   | Opcional. Un valor Boolean que indica que Auth0 debe analizar la fecha de expiración cuando se proporciona un certificado. Si no se proporciona un certificado, Auth0 devolverá un error. `parse_expiry_from_cert` y `expires_at` también se excluyen mutuamente. En este caso, Auth0 devolverá un error. |

    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      La clave pública en formato PEM debe escaparse como JSON antes de pasarla a Auth0. En nuestro ejemplo, este es el contenido que debemos pasar:

      `-----BEGIN PUBLIC KEY-----
                              MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA53VzmIVVZZWyNm266l82
                              mnoDc9g/snXklax5kChEhqK/WnTUvuXP4Gd4THj8rchxgUGKXd4PF3SUcKyn/qPm
                              Tet0idVHk2PwP//FOVgYo5Lb04js0pgZkbyB/WjuMp1w+yMuSn0NYAP7Q9U7DfTb
                              jmox8OQt4tCB4m7UrJghGqT8jkPyZO/Ka6/XsyjTYPOUL3t3PD7JShVAgo1mAY6g
                              Sr4SORywIiuHsg+59ad7MXGy78LirhtqAcDECKF7VZpxMuEjMLg3o2yzNUeWI2Mg
                              IF+t0HbO1E387fvLcuSyai1yWbSr1PXyiB2aXyDpbD4u7d3ux4ahU2opH11lBqvx
                              +wIDAQAB -----END PUBLIC KEY-----`
    </Callout>

    La respuesta contiene la propiedad `client_id`, que vinculará tu aplicación al servidor de recursos. La respuesta también contiene un `kid` generado para la credencial que creaste. Este se usará más adelante para generar el `client_assertion`.

    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      Auth0 sigue el estándar [JSON Web Key Thumbprint](https://datatracker.ietf.org/doc/html/rfc7638) para generar el `kid` de sus credenciales.

      El `kid` consiste en un hash SHA-256 codificado en base64URL de la representación JWK de su clave pública.
    </Callout>

    #### Configurar una aplicación existente

    También puedes configurar una aplicación existente para que use la autenticación con Private Key JWT mediante la Auth0 Management API. Para ello, deberás eliminar los valores del campo `token_endpoint_auth_method` y agregar valores en el campo `client_authentication_methods`.

    <Warning>
      Si actualiza una aplicación de producción existente para autenticarse con `private_key_jwt`, le recomendamos almacenar de forma segura el valor actual de `client_secret` para consultarlo más adelante.

      Después de configurar private\_key\_jwt, no podrá acceder al valor de client\_secret a menos que restaure la configuración de su aplicación para que use un Secreto del cliente.
    </Warning>

    ##### Crear el recurso de credencial

    Una vez que haya generado un par de claves, cree el recurso de credencial. Realice la siguiente solicitud POST al endpoint [`/clients`](https://auth0.com/docs/api/management/v2#!/Clients/post_clients) de la Management API.

    ```bash lines theme={null}
    curl --location --request POST 'https://{domain}/api/v2/clients/{clientId}/credentials' \
      --header 'Authorization: Bearer {managementApiAccessToken} \
      --header 'Content-Type: application/json' \
      --data-raw '{
              "name": "{credentialName}", 
              "credential_type": "public_key", 
              "pem": "{credentialPublicKey}",
              "alg": "{algorithm}",
              "expires_at ": "{expiresAt}",
    }'
    ```

    | Parámetro                  | Descripción                                                                                                                                                                                                                                                                                            |
    | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `algorithm`                | Algoritmo utilizado para firmar aserciones. Los valores admitidos son RS256, RS384 y PS256. Si no se especifica, el algoritmo predeterminado es RS256.                                                                                                                                                 |
    | `clientId`                 | ID de la aplicación que se actualizará.                                                                                                                                                                                                                                                                |
    | `credentialName`           | Nombre de la clave pública.                                                                                                                                                                                                                                                                            |
    | `managementApiAccessToken` | [Token de acceso para la Management API](/es/docs/secure/tokens/access-tokens/management-api-access-tokens) con el scope `create:credentials`.                                                                                                                                                         |
    | `pem`                      | Clave pública o certificado X.509, codificado en formato PEM.                                                                                                                                                                                                                                          |
    | `expires_at`               | Opcional. Fecha de vencimiento de la credencial en formato ISO 8601. Por ejemplo, `2020-08-20T19:10:06.299Z`. Una vez pasada la fecha de vencimiento, la credencial deja de ser válida.                                                                                                                |
    | `parse_expiry_from_cert`   | Opcional. Un valor booleano que indica que Auth0 debe extraer la fecha de vencimiento cuando se proporciona un certificado. Si no se proporciona un certificado, Auth0 devolverá un error. `parse_expiry_from_cert` y `expires_at` son mutuamente excluyentes. En este caso, Auth0 devolverá un error. |

    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      La clave pública PEM debe escaparse en JSON antes de enviarla a Auth0. En este ejemplo, el contenido que debemos pasar es:

      ```pem lines theme={null}
      -----BEGIN PUBLIC KEY-----
      MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA53VzmIVVZZWyNm266l82
      mnoDc9g/snXklax5kChEhqK/WnTUvuXP4Gd4THj8rchxgUGKXd4PF3SUcKyn/qPm
      Tet0idVHk2PwP//FOVgYo5Lb04js0pgZkbyB/WjuMp1w+yMuSn0NYAP7Q9U7DfTb
      jmox8OQt4tCB4m7UrJghGqT8jkPyZO/Ka6/XsyjTYPOUL3t3PD7JShVAgo1mAY6g
      Sr4SORywIiuHsg+59ad7MXGy78LirhtqAcDECKF7VZpxMuEjMLg3o2yzNUeWI2Mg
      IF+t0HbO1E387fvLcuSyai1yWbSr1PXyiB2aXyDpbD4u7d3ux4ahU2opH11lBqvx
      +wIDAQAB
      -----END PUBLIC KEY-----
      ```
    </Callout>

    La respuesta devuelve un credential ID. Utilice el ID para el siguiente paso.

    ##### Asociar la credencial

    Una vez que hayas creado la credencial, asóciala con tu aplicación. Tu aplicación usará estas credenciales durante la autenticación con `private_key_jwt`.

    Realiza una solicitud PATCH al endpoint [`Update a Client`](https://auth0.com/docs/api/management/v2#!/Clients/patch_clients_by_id) de la Management API:

    ```bash lines theme={null}
    curl --location --request PATCH 'https://{domain}/api/v2/clients/{clientId} \
      --header 'Authorization: Bearer {managementApiAccessToken} \
      --header 'Content-Type: application/json' \
      --data-raw '{
              "token_endpoint_auth_method": null, 
              "client_authentication_methods": {
                 "private_key_jwt": {
                    "credentials": [{ "id": {credentialId} }]
                 }
              }
       }​​'​​
    ```

    | Parámetro                  | Descripción                                                                                                                                                        |
    | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `clientId`                 | ID de la aplicación que se actualizará.                                                                                                                            |
    | `managementApiAccessToken` | [Token de acceso para la Management API](/es/docs/secure/tokens/access-tokens/management-api-access-tokens) con los scopes `update:client` y `update:credentials`. |
    | `credentialId`             | ID de la credencial que creó.                                                                                                                                      |
    | `pem`                      | La clave pública en formato PEM.                                                                                                                                   |

    <Warning>
      Auth0 no admite el uso de HS256 como algoritmo de firma de JWT de la aplicación. Debe tener el campo `jwt_configuration.alg` configurado con el algoritmo RS256. Para obtener información sobre cómo cambiar el algoritmo de firma, consulte [Cambiar los algoritmos de firma de la aplicación](/es/docs/get-started/applications/change-application-signing-algorithms).
    </Warning>

    #### Configurar una aplicación para usar autenticación con Secreto del cliente

    Para restaurar la configuración de su aplicación y usar un Secreto del cliente, debe deshabilitar `client_authentication_methods` y volver a habilitar `token_endpoint_auth_method` con el método de autenticación.

    <Warning>
      Una vez que haya configurado su método de autenticación como `client_secret`, sus aplicaciones ya no podrán autenticarse mediante `private_key_jwt` hasta que las actualice para que se autentiquen con `client_secret`.
    </Warning>

    **Ejemplo**

    ```bash lines theme={null}
    curl --location --request PATCH 'https://{domain}/api/v2/clients/{clientId} \
      --header 'Authorization: Bearer {managementApiAccessToken} \
      --header 'Content-Type: application/json' \
      --data-raw '{
              "token_endpoint_auth_method": "{tokenEndpointAuthMethod}", 
              "client_authentication_methods": null
       }​​'​​
    ```

    | Parámetro                  | Descripción                                                                                                                                                        |
    | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `clientId`                 | ID de la aplicación actualizada.                                                                                                                                   |
    | `managementApiAccessToken` | [Token de acceso para la Management API](/es/docs/secure/tokens/access-tokens/management-api-access-tokens) con los scopes `update:client` y `update:credentials`. |
    | `tokenEndpointAuthMethod`  | Método final de autenticación. Por ejemplo: `client_secret_basic` o `client_secret_post`.                                                                          |

    #### Actualizar credentials con un campo de expiración

    Puede actualizar una credencial existente con una fecha de vencimiento mediante el endpoint [Update a credential](https://auth0.com/docs/api/management/v2#!/Clients/patch_credentials_by_credential_id) de la Management API.

    ```bash lines theme={null}
    curl --location --request PATCH 'https://{domain}/api/v2/clients/{clientId}/credentials/{credentialId} ' \
      --header 'Authorization: Bearer {managementApiAccessToken} \
      --header 'Content-Type: application/json' \
      --data-raw '{
              "expires_at": {expiresAt}
       }'
    ```

    | Parámetro                  | Descripción                                                                                          |
    | -------------------------- | ---------------------------------------------------------------------------------------------------- |
    | `managementApiAccessToken` | Tokens de acceso para la Management API con el alcance ` update:credentials`.                        |
    | `clientId`                 | El cliente que desea actualizar.                                                                     |
    | `expires_at`               | La fecha de caducidad de la credencial en formato ISO 8601. Por ejemplo, `2020-08-20T19:10:06.299Z`. |

    El único campo que puede actualizar es el campo `expires_at`. El resto de los atributos son inmutables y, para modificarlos, es necesario rotar la credencial.
  </Tab>
</Tabs>

<div id="credential-limits">
  ## Límites de credenciales
</div>

Auth0 exige un tamaño mínimo de clave RSA de 2048 bits y un tamaño máximo de 4096 bits. Las aplicaciones pueden tener configuradas como máximo dos credenciales.

<div id="rotate-credentials">
  ## Rotar credenciales
</div>

Para evitar la exposición de claves, Auth0 recomienda rotar periódicamente el par de claves. Para saber cómo hacerlo, consulte [Rotar credenciales](/es/docs/get-started/applications/rotate-credentials).

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

* [Credenciales de la aplicación](/es/docs/secure/application-credentials)
* [Configuración de credenciales](/es/docs/get-started/applications/credentials)
* [Autenticarse con Private Key JWT](/es/docs/get-started/authentication-and-authorization-flow/authenticate-with-private-key-jwt)
