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

> Décrit le scénario de configuration particulier pour signer et chiffrer des requêtes SAML

# Signer et chiffrer des requêtes SAML

Pour renforcer la sécurité de vos transactions, vous pouvez signer ou chiffrer à la fois vos requêtes et vos réponses dans le protocole <Tooltip tip="Security Assertion Markup Language (SAML) : protocole normalisé qui permet à deux parties d’échanger des informations d’authentification sans mot de passe." cta="Afficher le glossaire" href="/docs/fr-CA/glossary?term=SAML">SAML</Tooltip>. Dans cet article, vous trouverez des configurations pour des scénarios spécifiques, réparties selon deux cas d’utilisation :

* Auth0 comme fournisseur de services SAML (par exemple, une connexion SAML)
* Auth0 comme <Tooltip tip="Identity Provider (IdP) : service qui stocke et gère des identités numériques." cta="Afficher le glossaire" href="/docs/fr-CA/glossary?term=identity+provider">fournisseur d'identité</Tooltip> SAML (par exemple, une application configurée avec l’add-on SAML Web App)

<div id="auth0-as-the-saml-service-provider">
  ## Auth0 comme fournisseur de services SAML
</div>

Ces scénarios s’appliquent lorsque Auth0 est le fournisseur de services SAML, ce qui signifie qu’Auth0 se connecte à un fournisseur d’identité SAML en créant une Connexion SAML.

<div id="sign-the-saml-authentication-request">
  ### Signer la requête d’authentification SAML
</div>

Si Auth0 est le **fournisseur de services** SAML, vous pouvez signer la requête d’authentification qu’Auth0 envoie à l’IdP de la façon suivante :

1. Accédez à [Auth0 Dashboard > Authentication > Enterprise](https://manage.auth0.com/#/connections/enterprise), puis sélectionnez **SAML**.
2. Sélectionnez le nom de la connexion à afficher.
3. Repérez **Sign Request** et activez cette option.
4. Téléchargez le certificat situé sous l’option **Sign Request**, puis fournissez‑le à l’IdP afin qu’il puisse valider la signature.

<div id="enabledisable-deflate-encoding">
  #### Activer ou désactiver le codage deflate
</div>

Par défaut, les requêtes d’authentification SAML sont envoyées par HTTP-Redirect et utilisent le codage deflate, ce qui place la signature dans un paramètre de requête.

Pour désactiver le codage deflate, vous pouvez effectuer un [appel PATCH vers le point de terminaison Update a Connection de la Management API](https://auth0.com/docs/api/management/v2#!/Connections/patch_connections_by_id) et définir l’option `deflate` sur `false`.

La mise à jour de l’objet `options` pour une connexion remplace l’ensemble de l’objet `options`. Pour conserver les options de connexion existantes, récupérez l’objet `options` actuel et ajoutez-y les nouvelles paires clé/valeur.

Point de terminaison : `https://{yourDomain}/api/v2/connections/{yourConnectionId}`

Charge utile :

```json lines theme={null}
{
	{ 
		"options" : {
			[...], // toutes les autres options de connexion
		  "deflate": false
	}
}
```

<div id="use-a-custom-key-to-sign-requests">
  ### Utiliser une clé personnalisée pour signer les requêtes
</div>

Par défaut, Auth0 utilise la clé privée du tenant pour signer les requêtes SAML (lorsque l’option **Sign Request** est activée). Vous pouvez aussi fournir votre propre paire de clés privée/publique pour signer les requêtes provenant d'une connexion spécifique.

Vous pouvez générer votre propre certificat et clé privée à l'aide de cette commande :

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

La clé utilisée pour signer les requêtes dans la connexion ne peut pas être modifiée dans l’interface du tableau de bord, vous devrez donc utiliser le [point de terminaison Update a Connection](https://auth0.com/docs/api/management/v2#!/Connections/patch_connections_by_id) de la <Tooltip tip="Management API : un produit permettant aux clients d’effectuer des tâches administratives." cta="Voir le glossaire" href="/docs/fr-CA/glossary?term=Management+API">Management API</Tooltip> v2 et ajouter une propriété `signing_key` à l’objet `options`, comme illustré dans l’exemple de charge utile ci-dessous.

Mettre à jour l’objet `options` pour une connexion remplace l’intégralité de l’objet `options`. Pour conserver les options de connexion précédentes, récupérez l’objet `options` existant et ajoutez-y les nouvelles paires clé-valeur.

Point de terminaison : `https://{yourDomain}/api/v2/connections/{yourConnectionId}`

Charge utile :

```json lines theme={null}
{
	{ 
		"options" : {
			[...], // toutes les autres options de la connexion
		  "signing_key": {
				"key":"-----BEGIN PRIVATE KEY-----\n...{votre clé privée ici}...\n-----END PRIVATE KEY-----",
				"cert":"-----BEGIN CERTIFICATE-----\n...{votre certificat de clé publique ici}...\n-----END CERTIFICATE-----"
			}
    }
	}
}
```

Pour savoir comment obtenir la clé privée et le certificat sous forme de chaîne JSON à utiliser dans la charge utile, consultez [Travailler avec des certificats, des clés et des chaînes de caractères](/docs/fr-CA/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings).

<div id="receive-signed-saml-authentication-responses">
  ### Recevoir des réponses d'authentification SAML signées
</div>

Si Auth0 est le **fournisseur de services** SAML, toutes les réponses SAML de votre fournisseur d'identité doivent être signées pour indiquer qu'elles n'ont pas été altérées par un tiers non autorisé.

Vous devrez configurer Auth0 pour valider les signatures des réponses en obtenant un certificat de signature auprès du fournisseur d'identité et en important ce certificat du fournisseur d'identité dans votre Connexion Auth0 :

1. Accédez à [Auth0 Dashboard > Authentication > Enterprise](https://manage.auth0.com/#/connections/enterprise), puis sélectionnez **SAML**.
2. Sélectionnez le nom de la connexion à consulter.
3. Repérez **X509 Signing Certificate**, puis téléversez le certificat.
4. Sélectionnez **Save Changes**.

Auth0 peut accepter une réponse signée pour l'assertion, la réponse ou les deux.

<div id="receive-encrypted-saml-authentication-assertions">
  ### Recevoir des assertions d’authentification SAML chiffrées
</div>

Si Auth0 est le fournisseur de services SAML, il peut être amené à recevoir des assertions chiffrées d’un fournisseur d’identité. Pour ce faire, vous devez fournir à l’IdP le certificat de la clé publique du tenant. L’IdP chiffre l’assertion SAML à l’aide de la clé publique et l’envoie à Auth0, qui la déchiffre à l’aide de la clé privée du tenant.

Utilisez les liens suivants pour obtenir la clé publique dans différents formats :

* [CER](https://\{yourDomain}/cer?cert=connection)
* [PEM](https://\{yourDomain}/pem?cert=connection)
* [PEM brut](https://\{yourDomain}/rawpem?cert=connection)
* [PKCS#7](https://\{yourDomain}/pb7?cert=connection)
* [Empreinte](https://\{yourDomain}/fingerprint?cert=connection)

Téléchargez le certificat dans le format demandé par l’IdP.

<div id="use-your-key-pair-to-decrypt-encrypted-responses">
  ### Utiliser votre paire de clés pour déchiffrer les réponses chiffrées
</div>

Comme indiqué ci-dessus, Auth0 utilisera par défaut la paire de clés privée/publique de votre tenant pour gérer le chiffrement. Vous pouvez également fournir votre propre paire de clés publique/privée si un scénario avancé l’exige.

La modification de la paire de clés utilisée pour chiffrer et déchiffrer les requêtes pour la connexion ne peut pas être effectuée dans l’interface du Dashboard. Vous devrez donc utiliser le [point de terminaison Update a Connection](https://auth0.com/docs/api/management/v2#!/Connections/patch_connections_by_id) de la Management API v2 et ajouter une propriété `decryptionKey` à l’objet `options`, comme illustré dans l’exemple de charge utile ci-dessous.

La mise à jour de l’objet `options` pour une connexion remplace l’intégralité de l’objet `options`. Pour conserver les options de connexion précédentes, récupérez l’objet `options` existant et ajoutez-y les nouvelles paires clé-valeur.

Point de terminaison : `https://{yourDomain}/api/v2/connections/{yourConnectionId}`

Charge utile :

```json lines theme={null}
{
	{ 
		"options" : {
			[...], // toutes les autres options de connexion
		  "decryptionKey": {
				"key":"-----BEGIN PRIVATE KEY-----\n...{votre clé privée ici}...\n-----END PRIVATE KEY-----",
				"cert":"-----BEGIN CERTIFICATE-----\n...{votre certificat de clé publique ici}...\n-----END CERTIFICATE-----"
			}
	}
}
```

Les métadonnées SAML disponibles pour la connexion seront mises à jour avec le certificat fourni afin que le fournisseur d'identité puisse y accéder pour signer la réponse SAML.

<div id="auth0-as-the-saml-identity-provider">
  ## Auth0 comme fournisseur d'identité SAML
</div>

Ce scénario s’applique lorsque Auth0 agit comme fournisseur d’identité SAML pour une application. Dans le Dashboard, cela est représenté par une **Application** dans laquelle le module complémentaire SAML Web App est activé.

<div id="sign-the-saml-responsesassertions">
  ### Signer les réponses/assertions SAML
</div>

Si Auth0 est le fournisseur d’identité SAML, il signera les assertions SAML avec la clé privée du locataire et fournira au fournisseur de services la clé publique/le certificat nécessaire pour valider la signature.

Pour signer les assertions SAML :

1. Allez sur [Auth0 Dashboard > Applications](https://manage.auth0.com/#/applications), et sélectionnez le nom de l’application à afficher.
2. Faites défiler jusqu’au bas de la page **Paramètres**, sélectionnez **Afficher les paramètres avancés** et sélectionnez l’affichage **Certificats**.
3. Sélectionnez **Télécharger le certificat** et sélectionnez le format dans lequel vous souhaitez recevoir votre certificat de signature.
4. Envoyez votre certificat au fournisseur de services.

Par défaut, Auth0 signe **l’assertion** SAML dans la réponse. Pour signer la **réponse** SAML à la place :

1. Naviguez vers [Auth0 Dashboard > Applications](https://manage.auth0.com/#/applications), et sélectionnez le nom de l’application à afficher.
2. Sélectionnez l’affichage **Modules complémentaires**.
3. Sélectionnez **Application Web SAML2** pour afficher ses paramètres, et localisez le bloc de code **Paramètres**.
4. Localisez la clé **`"signResponse"`**. Décommentez-la (ou ajoutez-la, si nécessaire), puis donnez-lui la valeur `true` (la valeur par défaut est `false`). La configuration devrait ressembler à ceci :

   ```json lines theme={null}
   {
     [...], // other settings
     "signResponse": true
   }
   ```

<div id="change-the-signing-key-for-saml-responses">
  #### Modifier la clé de signature pour les réponses SAML
</div>

Par défaut, Auth0 utilise la paire de clés privée/publique associée à votre tenant pour signer les réponses ou assertions SAML. Pour certains scénarios très spécifiques, vous pourriez souhaiter fournir votre propre paire de clés. Vous pouvez le faire au moyen d'une règle comme celle‑ci :

```javascript lines expandable theme={null}
/**
* Handler that will be called during the execution of a PostLogin flow.
*
* @param {Event} event - Details about the user and the context in which they are logging in.
* @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login.
*/
exports.onExecutePostLogin = async (event, api) => {

    // replace with the ID of the application that has the SAML Web App Addon enabled
      // for which you want to change the signing key pair.
      const samlIdpClientId = 'YOUR_SAML_APP_CLIENT_ID';

    // only do this for the specific client ID.  If you have multiple IdPs that require 
    // custom certificates, you will have an "if" statement for each one.  
    if (event.client.client_id === samlIdpClientId) {

    // fournir votre propre clé privée et certificat ici  
    // voir https://auth0.com/docs/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings 
    // pour les instructions de formatage : vous commencez essentiellement avec un certificat au format PEM et
    // remplacez les fins de ligne par « \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);

  }
  };
```

Pour savoir comment convertir les fichiers de clé privée et de certificat en chaînes de caractères que vous pouvez utiliser dans une règle, consultez la page [Work with Certificates and Keys and Strings](/docs/fr-CA/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings).

<div id="receive-signed-saml-authentication-requests">
  ### Recevoir des demandes d’authentification SAML signées
</div>

Si Auth0 est le fournisseur d’identité SAML, il peut recevoir des demandes signées avec la clé privée du fournisseur de services. Auth0 utilise la clé publique/le certificat pour valider la signature.

Pour configurer la validation de la signature :

1. Téléchargez le certificat du fournisseur de services avec la clé publique.
2. Naviguez vers [Auth0 Dashboard > Applications](https://manage.auth0.com/#/applications), et sélectionnez le nom de l’application à afficher.
3. Sélectionnez l’affichage **Modules complémentaires**.
4. Sélectionnez **Application Web SAML2** pour afficher ses paramètres, et localisez le bloc de code **Paramètres** .
5. Localisez la clé **`"signingCert"`**. Décommentez-la (ou ajoutez-la, si nécessaire), puis définissez sa valeur en fonction du certificat que vous avez téléchargé depuis le fournisseur de services. La configuration devrait ressembler à ceci :

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

<div id="send-encrypted-saml-authentication-assertions">
  ### Envoyer des assertions d’authentification SAML chiffrées
</div>

Si Auth0 est le fournisseur d'identité SAML, vous pouvez utiliser les [Actions](/docs/fr-CA/customize/actions) pour chiffrer les assertions SAML qu'il envoie.

Vous devez obtenir le certificat et la clé publique auprès du fournisseur de services. Si vous n'avez reçu que le certificat, vous pouvez extraire la clé publique à l'aide de `openssl`. En supposant que le fichier de certificat s'appelle `certificate.pem`, vous pouvez exécuter la commande suivante :

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

Une fois que vous avez les fichiers de certificat et de clé publique, vous devez [les convertir en chaînes de caractères](/docs/fr-CA/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings) pour les utiliser dans une Action. L'Action ressemblera à ce qui suit :

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

// cette Action définit une clé publique spécifique pour chiffrer l'assertion SAML générée à partir d'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);
  }
};
```

Les algorithmes suivants sont utilisés :

* [AES256](http://www.w3.org/2001/04/xmlenc#aes256-cbc) pour le chiffrement des assertions
* [RSA-OAEP](http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p) (y compris MGF1 et SHA1) pour le transport de clés

<div id="learn-more">
  ## Pour en savoir plus
</div>

* [Travailler avec des certificats et des clés sous forme de chaînes de caractères](/docs/fr-CA/authenticate/protocols/saml/saml-sso-integrations/work-with-certificates-and-keys-as-strings)
