> ## 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 el caso especial de configuración para firmar y cifrar solicitudes SAML

# Firmar y cifrar solicitudes SAML

export const AuthLink = ({href, target = "_blank", rel = "noopener noreferrer", children}) => {
  const [processedHref, setProcessedHref] = useState(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      unsubscribe = window.autorun(() => {
        let processedHref = href;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
          processedHref = processedHref.replace(new RegExp(escapedKey, "g"), value);
        }
        if (processedHref !== href) {
          setProcessedHref(processedHref);
        }
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [href]);
  if (!processedHref) {
    return <code>{href}</code>;
  }
  return <a className="link" href={processedHref} target={target} rel={rel}>
      {children}
    </a>;
};

Para mejorar la seguridad de tus transacciones, puedes firmar o cifrar tanto tus solicitudes como tus respuestas en el protocolo <Tooltip tip="Security Assertion Markup Language (SAML): Protocolo estandarizado que permite a dos partes intercambiar información de autenticación sin necesidad de una contraseña." cta="Ver glosario" href="/es/docs/glossary?term=SAML">SAML</Tooltip>. En este artículo, encontrarás configuraciones para escenarios específicos, divididas en dos casos de uso:

* Auth0 como proveedor de servicios SAML (por ejemplo, una conexión SAML)
* Auth0 como <Tooltip tip="Proveedor de identidad (IdP): Servicio que almacena y gestiona identidades digitales." cta="Ver glosario" href="/es/docs/glossary?term=identity+provider">proveedor de identidad</Tooltip> SAML (por ejemplo, una aplicación configurada con el add-on SAML Web App)

<div id="auth0-as-the-saml-service-provider">
  ## Auth0 como proveedor de servicios SAML
</div>

Estos escenarios se aplican cuando Auth0 es el proveedor de servicios SAML, lo que significa que Auth0 se conecta a un proveedor de identidad SAML al crear una conexión SAML.

<div id="sign-the-saml-authentication-request">
  ### Firmar la solicitud de autenticación SAML
</div>

Si Auth0 es el **proveedor de servicios** de SAML, puede firmar la solicitud de autenticación que Auth0 envía al IdP de la siguiente manera:

1. Vaya a [Auth0 Dashboard > Authentication > Enterprise](https://manage.auth0.com/#/connections/enterprise) y seleccione **SAML**.
2. Seleccione el nombre de la conexión que quiere ver.
3. Busque **Sign Request** y active el interruptor.
4. Descargue el certificado que aparece debajo del interruptor **Sign Request** y proporcióneselo al IdP para que pueda validar la firma.

<div id="enabledisable-deflate-encoding">
  #### Habilitar/deshabilitar la codificación deflate
</div>

De forma predeterminada, las solicitudes de autenticación SAML se envían mediante HTTP-Redirect y usan la codificación deflate, lo que coloca la firma en un parámetro de consulta.

Para desactivar la codificación deflate, puede hacer una [solicitud PATCH al endpoint Update a Connection de la Management API](https://auth0.com/docs/api/management/v2#!/Connections/patch_connections_by_id) y establecer la opción `deflate` en `false`.

Al actualizar el objeto `options` de una conexión, se sobrescribe por completo dicho objeto. Para conservar las opciones anteriores de la conexión, obtenga el objeto `options` existente y agréguele nuevos pares clave-valor.

Endpoint: `https://{yourDomain}/api/v2/connections/{yourConnectionId}`

Carga útil:

```json lines theme={null}
{
	{ 
		"options" : {
			[...], // todas las demás opciones de conexión
		  "deflate": false
    }
  }
}
```

<div id="use-a-custom-key-to-sign-requests">
  ### Usar una clave personalizada para firmar solicitudes
</div>

De forma predeterminada, Auth0 usa la clave privada del inquilino para firmar solicitudes SAML (cuando la opción **Sign Request** está habilitada). También puedes proporcionar tu propio par de claves privada/pública para firmar solicitudes de una conexión específica.

Puedes generar tu propio certificado y clave privada con este comando:

```bash wrap lines theme={null}
openssl req -x509 -nodes -sha256 -days 3650 -newkey rsa:2048 -keyout private_key.key -out certificate.crt
```

No es posible cambiar en la interfaz de usuario del Dashboard la clave usada para firmar solicitudes en la conexión, por lo que tendrás que usar el [endpoint Update a Connection](https://auth0.com/docs/api/management/v2#!/Connections/patch_connections_by_id) de la <Tooltip tip="Management API: Un producto que permite a los clientes realizar tareas administrativas." cta="Ver glosario" href="/es/docs/glossary?term=Management+API">Management API</Tooltip> v2 y agregar una propiedad `signing_key` al objeto `options`, como se muestra en el ejemplo de payload a continuación.

Al actualizar el objeto `options` de una conexión, se sobrescribe por completo el objeto `options`. Para conservar las opciones anteriores de la conexión, obtén el objeto `options` existente y agrégale los nuevos pares clave-valor.

Endpoint: `https://{yourDomain}/api/v2/connections/{yourConnectionId}`

Payload:

```json lines theme={null}
{
	{ 
		"options" : {
			[...], // todas las demás opciones de conexión
		  "signing_key": {
				"key":"-----BEGIN PRIVATE KEY-----\n...{your private key here}...\n-----END PRIVATE KEY-----",
				"cert":"-----BEGIN CERTIFICATE-----\n...{your public key cert here}...\n-----END CERTIFICATE-----"
			}
    }
	}
}
```

Para saber cómo obtener la clave privada y el certificado en formato de cadena JSON para usarlos en la carga útil, consulta [Trabajar con certificados y claves como cadenas](/es/docs/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings).

<div id="receive-signed-saml-authentication-responses">
  ### Recibir respuestas de autenticación SAML firmadas
</div>

Si Auth0 es el **proveedor de servicios** SAML, todas las respuestas SAML de su proveedor de identidad deben estar firmadas para indicar que no han sido manipuladas por un tercero no autorizado.

Deberá configurar Auth0 para validar las firmas de las respuestas. Para ello, obtenga un certificado de firma del proveedor de identidad y cárguelo en la conexión de Auth0:

1. Vaya a [Auth0 Dashboard > Authentication > Enterprise](https://manage.auth0.com/#/connections/enterprise) y seleccione **SAML**.
2. Seleccione el nombre de la conexión para verla.
3. Busque **X509 Signing Certificate** y cargue el certificado.
4. Seleccione **Save Changes**.

Auth0 puede aceptar una respuesta firmada para la aserción, para la respuesta o para ambas.

<div id="receive-encrypted-saml-authentication-assertions">
  ### Recibir aserciones de autenticación SAML cifradas
</div>

Si Auth0 es el proveedor de servicios SAML, puede que necesite recibir aserciones cifradas de un Proveedor de identidad. Para ello, debe proporcionar al IdP el certificado de clave pública del inquilino. El IdP cifra la aserción SAML con la clave pública y la envía a Auth0, que la descifra con la clave privada del inquilino.

Use los siguientes enlaces para obtener la clave pública en diferentes formatos:

* <AuthLink href="https://{yourDomain}/cer?cert=connection">CER</AuthLink>
* <AuthLink href="https://{yourDomain}/pem?cert=connection">PEM</AuthLink>
* <AuthLink href="https://{yourDomain}/rawpem?cert=connection">raw PEM</AuthLink>
* <AuthLink href="https://{yourDomain}/pb7?cert=connection">PKCS#7</AuthLink>
* <AuthLink href="https://{yourDomain}/fingerprint?cert=connection">Huella digital</AuthLink>

Descargue el certificado en el formato solicitado por el IdP.

<div id="set-content-decryption-algorithms">
  #### Configurar algoritmos de descifrado de contenido
</div>

De forma predeterminada, Auth0 admite automáticamente los algoritmos incluidos en el [perfil de algoritmos](/es/docs/authenticate/protocols/saml/saml-sso-integrations/algorithm-profiles) más reciente para descifrar aserciones SAML.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Si la aserción está cifrada con un algoritmo que no figura en la lista, Auth0 la rechazará.
</Callout>

Para especificar un perfil distinto o usar un algoritmo que no figure en la lista, debes actualizar la conexión mediante el endpoint [Update a Connection](https://auth0.com/docs/api/management/v2/connections/patch-connections-by-id) y cambiar la propiedad `assertion_decryption_settings`, como se muestra en el ejemplo de payload a continuación.

Cuando actualizas el objeto de opciones de una conexión, la nueva configuración reemplaza todo el objeto `options`. Para conservar las opciones anteriores de la conexión, obtén el objeto de opciones existente y agrégale nuevos pares clave-valor.

Endpoint: `https://{yourDomain}/api/v2/connections/{yourConnectionId}`
Payload:

```json theme={null}
{
  "options": {
    [...], // todas las demás opciones de conexión
    "assertion_decryption_settings": {
      "algorithm_profile": "v2026-1",
      "algorithm_exceptions": []
    }
  }
}
```

<div id="use-your-key-pair-to-decrypt-encrypted-responses">
  ### Utilice su par de claves para descifrar respuestas cifradas
</div>

Como se indicó anteriormente, Auth0 usará de forma predeterminada el par de claves privada/pública de su inquilino para gestionar el cifrado. También puede proporcionar su propio par de claves pública/privada si un escenario avanzado así lo requiere.

No es posible cambiar en la interfaz de usuario del Dashboard el par de claves que se usa para cifrar y descifrar solicitudes en la conexión, por lo que deberá usar el [endpoint Update a Connection](https://auth0.com/docs/api/management/v2#!/Connections/patch_connections_by_id) de la Management API v2 y agregar una propiedad `decryptionKey` al objeto `options`, como se muestra en el ejemplo de payload a continuación.

Actualizar el objeto `options` de una conexión sobrescribe por completo dicho objeto. Para conservar las opciones anteriores de la conexión, obtenga el objeto `options` existente y agréguele los nuevos pares clave/valor.

Endpoint: `https://{yourDomain}/api/v2/connections/{yourConnectionId}`

Payload:

```json lines theme={null}
{
	{ 
		"options" : {
			[...], // todas las demás opciones de conexión
		  "decryptionKey": {
				"key":"-----BEGIN PRIVATE KEY-----\n...{your private key here}...\n-----END PRIVATE KEY-----",
				"cert":"-----BEGIN CERTIFICATE-----\n...{your public key cert here}...\n-----END CERTIFICATE-----"
			}
	}
}
```

Los metadatos de SAML disponibles para la conexión se actualizarán con el certificado proporcionado para que el proveedor de identidad pueda usarlo para firmar la respuesta SAML.

<div id="auth0-as-the-saml-identity-provider">
  ## Auth0 como Proveedor de identidad SAML
</div>

Este escenario se aplica cuando Auth0 es el Proveedor de identidad SAML para una aplicación. Esto se representa en el Dashboard mediante una **Application** con el complemento SAML Web App Addon habilitado.

<div id="sign-the-saml-responsesassertions">
  ### Firmar las respuestas/aserciones SAML
</div>

Si Auth0 es el proveedor de identidad SAML, firmará las aserciones SAML con la clave privada del inquilino y proporcionará al proveedor de servicios la clave pública o el certificado necesarios para validar la firma.

Para firmar las aserciones SAML:

1. Vaya a [Auth0 Dashboard > Applications](https://manage.auth0.com/#/applications) y seleccione el nombre de la aplicación para verla.
2. Desplácese hasta la parte inferior de la página **Settings**, seleccione **Show Advanced Settings** y, a continuación, seleccione **Certificates**.
3. Seleccione **Download Certificate** y elija el formato en el que desea recibir el certificado de firma.
4. Envíe el certificado al proveedor de servicios.

De forma predeterminada, Auth0 firma la **aserción** SAML dentro de la respuesta. Para firmar la **respuesta** SAML en su lugar:

1. Vaya a [Auth0 Dashboard > Applications](https://manage.auth0.com/#/applications) y seleccione el nombre de la aplicación para verla.
2. Seleccione **Addons**.
3. Seleccione **SAML2 Web App** para ver su configuración y ubique el bloque de código **Settings**.
4. Ubique la clave **`"signResponse"`**. Quite el comentario (o agréguela, si es necesario) y establezca su valor en `true` (el valor predeterminado es `false`). La configuración debería verse así:

   ```json lines theme={null}
   {
     [...], // otra configuración
     "signResponse": true
   }
   ```

<div id="change-the-signing-key-for-saml-responses">
  #### Cambie la clave de firma de las respuestas SAML
</div>

De forma predeterminada, Auth0 usará el par de claves privada/pública asignado a su inquilino para firmar las respuestas o aserciones SAML. En casos muy específicos, quizá desee proporcionar su propio par de claves. Puede hacerlo con una Rule como esta:

```javascript lines expandable theme={null}
/**
* Controlador que se invocará durante la ejecución de un flujo PostLogin.
*
* @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
* @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para modificar el comportamiento del inicio de sesión.
*/
exports.onExecutePostLogin = async (event, api) => {

    // reemplazar con el ID de la aplicación que tiene habilitado el complemento SAML Web App
      // para la que se desea cambiar el par de claves de firma.
      const samlIdpClientId = 'YOUR_SAML_APP_CLIENT_ID';

    // hacer esto solo para el client_id específico. Si tiene varios IdPs que requieren 
    // certificados personalizados, agregue una sentencia "if" para cada uno.  
    if (event.client.client_id === samlIdpClientId) {

    // proporcione aquí su propia clave privada y certificado  
    // consulte https://auth0.com/docs/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings 
    // para instrucciones de formato: básicamente, comience con un certificado en formato PEM y
    // reemplace los saltos de línea con "\n"
    const signingCert = "-----BEGIN CERTIFICATE-----\nnMIIC8jCCAdqgAwIBAgIJObB6jmhG0QIEMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV[..all the other lines..]-----END CERTIFICATE-----\n";
    const signingKey = "-----BEGIN PRIVATE KEY-----\nnMIIC8jCCAdqgAwIBAgIJObB6jmhG0QIEMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV[..all the other lines..]-----END PRIVATE KEY-----\n";

    api.samlResponse.setCert(signingCert)    
    api.samlResponse.setKey(signingKey);

  }
  };
```

Para saber cómo convertir los archivos de clave privada y certificado en cadenas que puede usar en una Rule, consulte [Trabajar con certificados y claves como cadenas](/es/docs/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings).

<div id="receive-signed-saml-authentication-requests">
  ### Recibir solicitudes de autenticación SAML firmadas
</div>

Si Auth0 es el proveedor de identidad SAML, puede recibir solicitudes firmadas con la clave privada del proveedor de servicios. Auth0 utiliza la clave pública o el certificado para validar la firma.

Para configurar la validación de la firma:

1. Descargue el certificado del proveedor de servicios con la clave pública.
2. Vaya a [Auth0 Dashboard > Applications](https://manage.auth0.com/#/applications) y seleccione el nombre de la aplicación para verla.
3. Seleccione la vista **Addons**.
4. Seleccione **SAML2 Web App** para ver su configuración y localice el bloque de código **Settings**.
5. Localice la clave **`"signingCert"`**. Quite el comentario (o agréguela, si es necesario) y, luego, establezca su valor en el certificado que descargó del proveedor de servicios. La configuración debería verse así:

   ```json lines theme={null}
   {
     [...], // otras configuraciones
     "signingCert": "-----BEGIN CERTIFICATE-----\nMIIC8jCCAdqgAwIBAgIJObB6jmhG0QIEMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV\n[..all the other lines..]-----END CERTIFICATE-----\n"
   }
   ```

<div id="send-encrypted-saml-authentication-assertions">
  ### Enviar aserciones de autenticación SAML cifradas
</div>

Si Auth0 es el Proveedor de identidad SAML, puede usar [Actions](/es/docs/customize/actions) para cifrar las aserciones SAML que envía. También puede seleccionar el algoritmo que se usa para cifrar las aserciones. Auth0 recomienda usar `aes256-gcm` para una configuración de seguridad más sólida.

Debe obtener el certificado y la clave pública del proveedor de servicios. Si solo obtuvo el certificado, puede extraer la clave pública con `openssl`. Suponiendo que el archivo del certificado se llame `certificate.pem`, puede ejecutar:

`openssl x509 -in certificate.pem -pubkey -noout > public_key.pem`

Una vez que tenga los archivos del certificado y de la clave pública, debe [convertirlos en cadenas](/es/docs/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings) para usarlos en una Action. La Action tendrá este aspecto:

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {

// este Action establece una clave pública específica para cifrar la aserción SAML generada por Auth0
  if (
    event.client.client_id ===
    "THE_CLIENT_ID_OF_THE_APP_WITH_THE_SAML_APP_ADDON"
  ) {
    const encryptionCert =
      "-----BEGIN CERTIFICATE-----\nnMIIC8jCCAdqgAwIBAgIJObB6jmhG0QIEMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV[..all the other lines..]-----END CERTIFICATE-----\n";
    const encryptionPublicKey =
      "-----BEGIN PUBLIC KEY-----\nnMIIC8jCCAdqgAwIBAgIJObB6jmhG0QIEMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV[..all the other lines..]-----END PUBLIC KEY-----\n";

    api.samlResponse.setEncryptionCert(encryptionCert);
    api.samlResponse.setEncryptionPublicKey(encryptionPublicKey);
    api.samlResponse.setEncryptionAlgorithm("aes256-gcm");
  }
};
```

Auth0 admite los siguientes algoritmos para el cifrado de aserciones:

* [`aes256-gcm`](https://www.w3.org/TR/xmlenc-core1/#sec-AES-GCM) **(recomendado)**: Cifrado autenticado que proporciona confidencialidad e integridad. Es resistente a ataques de oráculo de validez de formato.
* [`aes256-cbc`](https://www.w3.org/TR/xmlenc-core1/#sec-AES) (predeterminado): No ofrece garantías de integridad. Cuando una Action no usa el objeto [`api.samlResponse.setEncryptionAlgorithm`](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#api-samlresponse-setencryptioncert-encryptioncert) para establecer el algoritmo de cifrado, Auth0 usa de forma predeterminada el algoritmo `aes256-cbc` y registra una advertencia de desuso en los registros de tu inquilino.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Para el transporte de claves, Auth0 usa [`rsa-oaep`](https://www.w3.org/TR/xmlenc-core1/#rsa-oaep), incluidas las funciones MGF1 y SHA1.
</Callout>

<Warning>
  Auth0 tiene previsto actualizar el algoritmo de cifrado predeterminado a `aes256-gcm`.

  Para mantener un comportamiento coherente después de que cambie el algoritmo predeterminado, recomendamos cambiar a `aes256-gcm`:

  1. Verifica que tu proveedor de servicios SAML admita `aes256-gcm`; si no es así, ponte en contacto con él para solicitar soporte.
  2. Establece el algoritmo de cifrado en el código de tu Action con `api.samlResponse.setEncryptionAlgorithm("aes256-gcm");`.
</Warning>

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

* [Trabajar con certificados y claves como texto](/es/docs/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings)
