Extension Clé de vérification pour l'échange de code (PKCE)
Pour renforcer la sécurité de vos implémentations OAuth et fournisseur d'authentification, utilisez l’extension Clé de vérification pour l'échange de code OAuth 2.0. Vous pouvez demander l'extension PKCE au niveau de l'organisation, pour une application connectée spécifique, et l'activer automatiquement pour les fournisseurs d'authentification pris en charge.
Éditions requises
| Disponible avec : toutes les éditions |
Durant le flux Code d'autorisation OAuth et ses dérivés, l'extension PKCE permet de vérifier que le client initiant le flux est celui qui complète le flux. Pendant ces flux, une application demande un code d'autorisation à Salesforce, puis l'échange contre un jeton d'accès. Généralement, l'application peut sécuriser la requête de jeton en incluant le secret consommateur de son application connectée. Le secret consommateur est une information connue uniquement de l'application et Salesforce. Par conséquent, il fonctionne comme un mot de passe d'accès au point de terminaison de jeton Salesforce. Même si un assaillant accède à un code d'autorisation, il ne peut pas l'utiliser pour obtenir un jeton d'accès sans connaître le secret consommateur.
Cependant, les clients publics, tels que les applications mobiles et les applications à page unique, ne peuvent pas protéger le secret consommateur. Contrairement aux applications clientes privées avec une architecture client-serveur traditionnelle, les clients publics ne possédent pas de back-end privé dans lequel stocker le secret consommateur. Si un client public envoie le secret consommateur dans la requête de jeton, il risque de le révéler. Pour cette raison, nous recommandons de ne jamais inclure le secret consommateur dans les requêtes de jeton d'un client public.
Sans secret consommateur, l'application est vulnérable face à un assaillant qui intercepte le code d'autorisation et tente de l'échanger contre un jeton d'accès. L'extension PKCE comble l'absence de secret consommateur avec des paramètres hachés que seules votre application et Salesforce peuvent déchiffrer. Pendant un flux qui implémente l'extension PKCE, l'application crée une chaîne aléatoire, appelée paramètre code_verifier. Cette valeur est ensuite hachée à l'aide de l'algorithme SHA-256. Cette valeur hachée correspond au paramètre code_challenge. Le concept clé du hachage SHA-256 est son fonctionnement unidirectionnel. Vous pouvez obtenir le code_challenge du code_verifier en exécutant l'algorithme SHA-256. Cependant, vous ne pouvez pas l'exécuter à l'envers pour récupérer le code_verifier du code_challenge.
Ce concept unidirectionnel joue un rôle important dans le fonctionnement de l'extension PKCE. Lorsque l'application envoie sa requête initiale de code d'autorisation, elle inclut le paramètre code_challenge haché. Lorsqu'elle demande ensuite un jeton d'accès, elle inclut le paramètre code_verifier. Salesforce dispose maintenant des deux paramètres et peut exécuter l'algorithme SHA-256 sur la valeur code_verifier pour la comparer à code_challenge. Si les valeurs correspondent, Salesforce peut vérifier que la même application a envoyé la demande d'autorisation et la demande de jeton. Même si l'assaillant possède le code d'autorisation, il ne peut pas l'échanger contre un jeton d'accès, car il n'a pas les paramètres de l'extension PKCE que connaissent votre application et Salesforce.
Nous recommandons de toujours implémenter l'extension PKCE pour des clients publics. Pour des clients privés, nous recommandons d'implémenter l'extension PKCE et d'inclure le secret consommateur dans les requêtes de jeton.
Vous pouvez également implémenter l'extension PKCE en incluant les paramètres code_challenge et code_verifier en élaborant des variantes du flux code d'autorisation avec Salesforce. Les flux suivants prennent en charge extension PKCE :
- Flux Serveur Web
- Flux Serveur Web hybride
- Toutes les variantes du flux Code d'autorisation et identifiants, notamment l'inscription headless, la connexion sans mot de passe headless et les flux invités headless. Consultez Flux Identité headless.
Pour vous assurer que l'extension PKCE est automatiquement appliquée, nous recommandons de suivre les mesures de sécurité ci-dessous.
- Demandez l'extension PKCE au niveau de l'organisation dans la page des paramètres OAuth et OpenID Connect. Lorsque ce paramètre est activé, toutes les variantes du flux Code d'autorisation qui n'utilisent pas l'extension PKCE sont automatiquement bloquées.
- Demandez l'extension PKCE pour des applications connectées spécifiques. En tant que développeur d'application connectée, si vous activez ce paramètre, vous devez implémenter l'extension PKCE en élaborant des flux d'autorisation avec cette application.
- Utilisez l'extension PKCE pour un fournisseur d'authentification. Pour les fournisseurs d'authentification pris en charge, vous pouvez utiliser automatiquement l'extension PKCE en sélectionnant un paramètre unique. Les fournisseurs d'authentification ci-dessous prennent en charge l'extension PKCE.
Génération des paramètres PKCE
Utilisez le point de terminaison PKCE Generator pour générer rapidement les paramètres code_challenge et code_verifier que vous pouvez implémenter dans les variantes du flux code d'autorisation.
- Activez le partage de ressources d'origine croisée (CORS) pour les points de terminaison OAuth, qui active automatiquement le CORS pour le point de terminaison
/services/oauth2/pkce/generator. - Pour générer les paramètres de
code_challengeet decode_verifier, envoyez une requête GET HTTP au point de terminaison/services/oauth2/pkce/generatordans l'URL de connexion de votre Mon domaine ou l'URL de votre site Experience Cloud. N'incluez aucun en-tête ou paramètre de corps dans cette requête.Voici un exemple de requête qui utilise une URL de connexion Mon domaine.GET /services/oauth2/pkce/generator? HTTP 1.1 Host: MyDomainName.my.site.salesforce.comVoici un exemple de requête qui utilise une URL de site Experience Cloud.GET /services/oauth2/pkce/generator? HTTP 1.1 Host: MyDomainName.my.site.comSalesforce répond avec les paramètres PKCE ci-dessous.
Voici un exemple de réponse :Paramètre Description code_challenge_methodLa méthode utilisée pour calculer le code_challengeà partir ducode_verifier. Salesforce utilise la méthodeS256, qui calcule lecode_challengeà partir ducode_verifierà l'aide d'un algorithme SHA256. Pour plus d'informations, consultez la Section 4.2 dans RFC 7636: Proof Key for Code Exchange by OAuth Public Clients.code_challengeSpécifie la valeur de hachage SHA256 de la valeur
code_verifierdans la demande de jeton. La valeur est une URL encodée en Base-64 telle que définie dans la Section 5 de RFC 4648: The Base16, Base32, and Base64 Data Encodings.Lorsque vous configurez votre flux d'autorisation, insérez cette valeur dans la demande d'autorisation.
code_verifierSpécifie 128 octets de données aléatoires avec une entropie élevée pour rendre la valeur du code difficile à deviner. Définissez ce paramètre pour empêcher les attaques par interception de code d'autorisation. La valeur est une URL encodée en Base-64 telle que définie dans la Section 5 de RFC 4648: The Base16, Base32, and Base64 Data Encodings.
Lorsque vous configurez votre flux d'autorisation, insérez cette valeur dans la demande de jeton.
{ “code_challenge_method”:“S256” “code_challenge”:“JB7nT*************” “code_verifier”:“GkLvw**************” }
Lorsque vous configurez le flux Serveur Web, le flux Serveur Web hybride et les variantes du flux Code d'autorisation et identifiants, insérez les paramètres code_challenge et code_verifier dans vos requêtes comme indiqué.

