Saltar al contenido principal
La autenticación de cliente con clave privada es un método alternativo de autenticación de cliente para las conexiones empresariales de Connect (OIDC) y Okta Workforce. Aunque la autenticación de cliente suele realizarse mediante el envío de un compartido, la autenticación de cliente con JWT de clave privada utiliza en su lugar un JWT firmado para mejorar la seguridad de la aplicación. Al usar esta función, puede evitar algunas deficiencias de seguridad comunes que suelen observarse con la autenticación estándar mediante secreto del cliente, como:
  • Un mayor riesgo de interceptación y reutilización, ya que los secretos del cliente deben transmitirse entre las partes en cada solicitud.
  • Mecanismos limitados para aplicar la expiración y evitar la reutilización por parte de actores maliciosos.
  • Un mayor riesgo de filtraciones o exposición debido a que ambas partes conservan el secreto del cliente.
Puede configurar la autenticación de cliente con JWT de clave privada para sus conexiones empresariales de OIDC y Okta Workforce mediante el o la .

Cómo funciona

El flujo de conexión OIDC utiliza endpoints autenticados, como /oauth/token o /oauth/par, para verificar la identidad de un cliente ante el o proveedor de OpenID. Con Private Key JWT Client Authentication, se envía una aserción JWT del cliente firmada al proveedor de OpenID en lugar de un secreto del cliente. La aserción JWT del cliente contiene los siguientes claims:
  • Un aud () que identifica el del proveedor de OpenID.
  • Un jti (ID de JWT) para permitir el uso único o la protección contra repeticiones.
  • Un exp (hora de expiración) que limita la ventana de validez del token.
  • Un sub e iss que identifican el .
Private Key JWT Client Authentication ofrece un método de autenticación más seguro, ya que elimina el uso de secretos del cliente compartidos. En su lugar, el JWT se firma con la clave privada del cliente, y el proveedor de OpenID solo tiene acceso a la clave pública.

Flujo de autenticación de cliente con JWT de clave privada

Después de que un usuario complete la autenticación con un (IdP) externo, se le redirige a Auth0 con un código de autorización que se canjea por tokens en el endpoint de token del proveedor de OpenID. Cuando JWT de clave privada está habilitado para una conexión, la llamada al endpoint de token del proveedor de OpenID usa una aserción de cliente en lugar de un secreto del cliente, para ofrecer una autenticación más segura. Los siguientes pasos muestran un flujo típico de autenticación de cliente con JWT de clave privada.
Un diagrama que representa el flujo de autenticación de cliente con JWT de clave privada.
Para completar este flujo, primero debe configurar una conexión OIDC u Okta Workforce, nueva o existente, con token_endpoint_auth_method=private_key_jwt mediante Auth0 Dashboard o la Management API. Para obtener más información, consulte la sección Configurar la autenticación de cliente con JWT de clave privada.
  1. Después de configurar su conexión, Auth0 genera y almacena automáticamente dos pares de claves públicas y privadas.
    • Un par de claves corresponde al conjunto activo current, mientras que el otro se etiqueta como next para admitir la rotación de claves.
  2. Según su IdP, a continuación debe hacer una de estas acciones:
    • Descargar la clave pública current y cargar el archivo en el Servidor de autorización, o bien:
    • Copiar y pegar el jwks_uri en el Servidor de autorización.
  3. Un usuario realiza una acción que requiere autenticación, como iniciar sesión en su aplicación.
  4. Auth0 envía una solicitud al Servidor de autorización para iniciar la autenticación.
  5. El Servidor de autorización muestra al usuario las pantallas de autenticación y consentimiento.
  6. El usuario se autentica y otorga su consentimiento al Servidor de autorización.
  7. El Servidor de autorización envía un código de autorización a Auth0.
  8. Auth0 genera un JWT de aserción de cliente y lo firma con la clave privada current.
  9. Auth0 envía el JWT de aserción de cliente al Servidor de autorización.
  10. El Servidor de autorización busca el cliente en función del client_id proporcionado.
  11. El Servidor de autorización recupera las claves públicas de Auth0 si se proporcionó un jwks_uri; de lo contrario, identifica la clave pública registrada en el paso 2.
  12. Si se solicitó el jwks_uri, Auth0 devuelve las claves públicas como JWKS.
  13. El Servidor de autorización valida el JWT verificando la firma con la clave pública current, identificada por kid en el encabezado del JWT client_assertion.
  14. El Servidor de autorización genera un token de acceso.
  15. El Servidor de autorización envía el token de acceso a Auth0.
  16. Con el token de acceso, Auth0 solicita un recurso al Servidor de recursos.
  17. El Servidor de recursos proporciona el recurso para completar el flujo.

Configurar la autenticación de cliente con JWT de clave privada

Puede configurar las conexiones empresariales de OIDC y Okta Workforce para usar la autenticación de cliente con JWT de clave privada mediante Auth0 Dashboard o Management API. A continuación, se indican los pasos para cada método.
  • Auth0 genera automáticamente pares de claves de firma públicas y privadas para cada conexión.
  • Puede usar los siguientes algoritmos para firmar JWT de aserción de cliente: RS256, RS384, RS512, PS256, PS384, ES256 y ES384 para las conexiones empresariales de Okta y OIDC. El valor predeterminado es RS256 si no se especifica.
  • Los JWT firmados vencen automáticamente después de 60 segundos.

Auth0 Dashboard

Puede usar Auth0 Dashboard para configurar la autenticación de cliente con JWT de clave privada en conexiones OIDC y Okta Workforce, tanto nuevas como existentes.
  1. En Auth0 Dashboard, vaya a Authentication > Enterprise.
  2. Junto a OpenID Connect u Okta Workforce, seleccione Create.
  3. En la sección General, proporcione los datos de la nueva conexión, incluidos su nombre y la URL de detección.
  4. Configure los siguientes campos para habilitar Private Key JWT:
    • Establezca Communication Channel en Back Channel.
    • Establezca Authentication Method en Private Key JWT.
  5. Seleccione Create para guardar la nueva conexión.

Management API

Puede usar la Management API para configurar la autenticación de cliente con JWT de clave privada para conexiones OIDC nuevas y existentes.
Para crear una nueva conexión OIDC que use autenticación de cliente con JWT de clave privada, llame al endpoint Create a Connection con las siguientes propiedades de connection.options establecidas según corresponda:
PropiedadDescripción
typeEstablezca esta propiedad en back_channel.
token_endpoint_auth_methodMétodo de autenticación usado en el endpoint de token del proveedor de identidad. Establézcalo en private_key_jwt para usar una aserción JWT firmada y mejorar la seguridad, o en client_secret_post para enviar credenciales en el cuerpo de la solicitud. El valor predeterminado es client_secret_post. Se aplica solo a las estrategias oidc y okta.
token_endpoint_auth_signing_algOpcional. Algoritmo usado para firmar aserciones de cliente. Valores aceptados: RS256, RS384, RS512, PS256, PS384, ES256, ES384. El valor predeterminado es RS256 si no se establece. Se aplica solo a las estrategias oidc y okta.
id_token_signed_response_algsOpcional. Lista de algoritmos permitidos para verificar los tokens de ID emitidos por el proveedor de identidad. Cuando se establece, Auth0 rechaza los tokens de ID firmados con cualquier algoritmo que no esté en esta lista. Valores aceptados: RS256, RS384, RS512, PS256, PS384, ES256, ES384. Si no se establece, Auth0 acepta tokens de ID firmados con cualquier algoritmo compatible. Se aplica solo a las estrategias oidc y okta.
token_endpoint_jwtca_aud_formatOpcional. Especifica el formato del claim aud (audiencia) en el JWT usado para la autenticación del cliente en el endpoint de token. Establézcalo en issuer para usar la URL del emisor de OIDC, o en token_endpoint para usar la URL del endpoint de token. El valor predeterminado es token_endpoint.
Ejemplo de llamada POST
POST /api2/connections

{
  strategy: 'oidc',
  options: {
    type: "back_channel",
    token_endpoint_auth_method: "private_key_jwt",
    token_endpoint_auth_signing_alg: "RS256",
    id_token_signed_response_algs: ["RS256", "RS384"]
  },

}

Recuperar claves de firma

Después de configurar su conexión para usar la autenticación de cliente con JWT de clave privada, puede recuperar sus claves públicas a través del Auth0 Dashboard, la Management API o una URI pública de JWKS.
Para recuperar las claves de firma a través del Auth0 Dashboard:
  1. Vaya a Authentication > Enterprise.
  2. Junto a OpenID Connect u Okta Workforce, seleccione Browse.
  3. Elija la conexión correspondiente. Luego, abra la pestaña Credentials.
  4. Busque la sección Credentials y seleccione el icono Download junto a la clave de firma correspondiente.
Para ver las claves públicas a través de la Management API, llame al endpoint Get connection keys con el id de su conexión.
El uso de este endpoint requiere el scope read:connections_keys.
Ejemplo de llamada GET
GET /api2/connections/{id}/keys
Ejemplo de respuesta
{
    cert: "-----BEGIN CERTIFICATE-----
MIIDDTCCAfWgAwIBAgIJP...Ek=
-----END CERTIFICATE-----",
    pkcs7: "-----BEGIN PKCS7-----
MIIDPAYJKoZIhvcNAQcCo...AA==
-----END PKCS7-----
",
    kid: "E4CXqUP6r92yo0f_sdkdC",
    next: true,
    fingerprint: "7F:33:86:D9:4A:98:B2:DC:B0:41:74:54:DA:31:E7:74:42:32:96:8C",
    thumbprint: "7F3386D94A98B2DCB0417454DA31E7744232968C"
  }, 
  {
    cert: "-----BEGIN CERTIFICATE-----
MIIDDTCCAfWgAwIBAgI...Ss=
-----END CERTIFICATE-----",
    pkcs7: "-----BEGIN PKCS7-----
MIIDPAYJKoZIhvcNAQ...AA==
-----END PKCS7-----
",
    kid: "_4WuXpXlwwmSE65saKWDM",
    current: true,
    current_since: "2025-01-24T08:50:06.662Z",
    fingerprint: "33:7D:6F:35:46:31:AD:6E:69:43:01:A2:77:DF:8E:73:64:F6:E8:5B",
    thumbprint: "337D6F354631AD6E694301A277DF8E7364F6E85B"
  }, 
  {
    cert: "-----BEGIN CERTIFICATE-----
MIIDDTCCAfWgAwIBA...6Q=
-----END CERTIFICATE-----",
    pkcs7: "-----BEGIN PKCS7-----
MIIDPAYJKoZIhvcN...AA==
-----END PKCS7-----
",
    kid: "roUD9STeDy9qBTx5XjaTz",
    previous: true,
    current_since: "2025-01-24T08:48:51.523Z",
    current_until: "2025-01-24T08:50:06.663Z",
    fingerprint: "44:D3:DD:3B:63:99:59:9A:39:D9:F4:F0:4F:1B:AC:BB:18:72:40:5C",
    thumbprint: "44D3DD3B6399599A39D9F4F04F1BACBB1872405C"
  }
Algunos Proveedores de identidad permiten proporcionar claves públicas para private_key_jwt en forma de una URI pública de JWKS (JSON Web Key Set).Si se han generado claves públicas para una conexión, puede recuperarlas agregando la siguiente URI a la configuración de su IdP:
https://{auth0 domain}/oauth/connection/{connection name}/.well-known/jwks.json
Las URI de JWKS se contabilizan dentro de los límites globales de tasa. Puede usar el almacenamiento en caché de las claves públicas para evitar alcanzarlos. Como práctica recomendada, Auth0 recomienda un intervalo de caché de al menos 5-10 minutos para evitar llamar al endpoint de la URI de JWKS en cada intento de inicio de sesión.

Rotación de claves de firma

La autenticación de cliente con JWT de clave privada admite la rotación de claves de firma para aumentar la seguridad frente al carácter estático y de larga duración de los secretos compartidos del cliente. Rotar las claves de firma mejora la seguridad al limitar el tiempo de exposición de cada clave, lo que reduce la ventana de oportunidad para que un atacante pueda comprometerla. También permite responder con rapidez ante un incidente de seguridad. Para evitar interrupciones, Auth0 recomienda rotar las claves de firma al cabo de un año. Puede usar tanto el Auth0 Dashboard como la Management API para rotar las claves de firma:
Para rotar sus claves de firma desde el Auth0 Dashboard:
  1. Vaya a Authentication > Enterprise.
  2. Junto a OpenID Connect u Okta Workforce, seleccione Browse.
  3. Elija la conexión correspondiente. Después, abra la pestaña Credentials.
  4. En la sección Credentials, seleccione Rotate Keys.
  5. En la ventana emergente, seleccione Save para confirmar la rotación.
Después de la rotación, cualquier JWT en tránsito firmado con la clave anterior queda inactivo de inmediato y puede no superar la verificación con su IdP.
Para ver las claves públicas mediante la Management API, llame al endpoint Rotate Connection Signing Keys con el ID de su conexión.
El uso de este endpoint requiere los alcances create:connections_keys y update:connections_keys.
POST /v2/connections/{id}/keys/rotate
Después de la rotación, cualquier JWT en tránsito firmado con la clave anterior queda inactivo de inmediato y puede no superar la verificación con su IdP.

Comprender la rotación de claves

En su conexión OIDC u Okta Workforce, sus claves de firma tienen asignado uno de los siguientes estados:
  • Current: La clave de firma que la aplicación usa actualmente.
  • Next: La siguiente clave de firma que usará la aplicación una vez que se revoque la clave actual.
  • Previous: Una clave de firma vencida o revocada por algún otro motivo que ya no se usa.
Cuando se habilita por primera vez la autenticación de cliente con JWT de clave privada para una conexión, solo se genera un par de claves current y next. Una clave solo se marca como previous después de que se produce una rotación.Al rotar las claves de firma, se producen los siguientes cambios:
  1. La clave current se elimina y se revoca, y cualquier JWT firmado con esta clave no superará la verificación con el IdP si el IdP se configuró con jwks_uri.
  2. A la clave current se le asigna el estado previous.
  3. La clave next pasa a ser la clave activa y recibe el estado current. A partir de ese momento, los JWT de aserción de cliente se firmarán con esta clave.
  4. Se genera automáticamente una nueva clave de firma para reemplazar la clave rotada. La nueva clave de firma recibe el estado next.

Más información