Flux de jeton d'actualisation OAuth 2.0 pour des sessions renouvelées
Le flux de jeton d'actualisation OAuth 2.0 renouvelle les jetons d'accès émis par le flux du serveur Web OAuth 2.0 ou le flux utilisateur-agent OAuth 2.0.
Éditions requises
| Disponible avec : Salesforce Classic (pas disponible dans toutes les organisations) et Lightning Experience |
| Disponible avec : Toutes les éditions |
Lorsqu'un client reçoit un jeton accès, via une application connectée, il peut utiliser un jeton d'actualisation pour obtenir une nouvelle session lorsque la session actuelle expire. La valeur d'expiration de session de l'application connectée détermine quand un jeton d'accès n'est plus valide et quand un nouveau jeton doit être demandé en utilisant un jeton d'actualisation.
Pour plus de sécurité, activez la rotation du jeton d'actualisation dans votre application connectée ou application cliente externe lorsque vous configurez ses paramètres OAuth. Lorsque ce paramètre est activé, l'application connectée émet un nouveau jeton d'actualisation chaque fois que le flux est invoqué. Le jeton d'actualisation précédent est automatiquement invalidé. La rotation de jeton d'actualisation garantit que chaque jeton d'actualisation n’est utilisé qu’une seule fois par utilisateur. Par conséquent, un jeton d’actualisation ne peut pas être utilisé pour obtenir un nouveau jeton d’accès. Si un utilisateur tente d'utiliser un jeton d'actualisation qui a été permuté, Salesforce invalide le jeton d'actualisation actuel et tous les jetons d'accès associés. Pour obtenir un nouveau jeton d'actualisation, le client doit compléter un nouveau flux.
Le flux de jeton d'actualisation implique les étapes ci-dessous.
- L'application connectée utilise le jeton d'actualisation existant pour demander un nouveau jeton d'accès.
- Après avoir vérifié la requête, Salesforce accorde un nouveau jeton accès au client.
Demander un jeton d'accès
Une application connectée peut utiliser le jeton d'actualisation pour obtenir un nouveau jeton accès en envoyant l'une des requêtes POST de jeton d'actualisation ci-dessous au point de terminaison de jeton Salesforce.
L'application connectée peut envoyer client_id et client_secret dans le corps de la requête POST de jeton d'actualisation, comme indiqué ici.
POST /services/oauth2/token HTTP/1.1
Host: login.salesforce.com/
grant_type=refresh_token&
client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&client_secret=1955279925675241571&
refresh_token=your token here Au lieu d'envoyer les identifiants client en tant que paramètres dans le corps de la requête POST du jeton d'actualisation, vous pouvez utiliser le schéma d'authentification de base HTTP. Le format de ce schéma nécessite client_id et client_secret dans l'en-tête d'autorisation de la requête POST, comme suit :
Authorization:
Basic64Encode(client_id:secret)
Les client_id et les client_secret sont séparés par deux points (:). Pour plus d’informations, consultez OAuth 2.0 Authorization Framework.
Cet exemple présent une requête POST de jeton d'actualisation qui utilise le schéma d'authentification de base HTTP, au lieu d'envoyer les identifiants clients dans le corps de la requête POST.
POST /services/oauth2/token HTTP/1.1
Host: login.salesforce.com
Authorization: Basic
client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&
client_secret=1955279925675241571
grant_type=refresh_token&
refresh_token=your token here client_id et client_secret sont envoyés dans le corps du POST, l'en-tête d'autorisation est ignoré.Évitez d'envoyer des requêtes simultanées contenant le même jeton d'actualisation. Si votre client envoie des requêtes identiques en même temps, certaines échouent par intermittence et la colonne Statut de l'historique des connexions affiche Échoué : La demande de jeton est déjà en cours de traitement. Au lieu d'envoyer continuellement des requêtes pour de nouveaux jetons d'accès, mettez en cache et réutilisez à la place des jetons. Si vous envoyez des requêtes simultanées avec le même jeton d'actualisation, ce qui n'est pas recommandé, développez un moyen de réessayer les requêtes en cas d'erreur.
Avec les deux formats de requête POST de jeton d'actualisation, insérez les paramètres ci-dessous.
| Paramètre | Description |
|---|---|
client_id
|
La clé consommateur de l'application connectée. Pour accéder à la clé consommateur, dans le Gestionnaire d'applications, recherchez l'application connectée, puis sélectionnez Afficher dans la liste déroulante. Cliquez ensuite sur Gérer les détails du consommateur. Vous pouvez être invité à confirmer votre identité avant d'être autorisé à afficher la clé consommateur. |
client_secret
|
Le secret consommateur de l'application connectée. Pour accéder au secret consommateur, dans le Gestionnaire d'applications, recherchez l'application connectée, puis sélectionnez Afficher dans la liste déroulante. Cliquez ensuite sur Gérer les détails du consommateur. Vous pouvez être invité à confirmer votre identité avant d'être autorisé à afficher le secret consommateur. |
grant_type
|
Le type d'autorisation d'accès OAuth 2.0 que demande l'application connectée. La valeur doit être refresh_token pour ce flux. |
refresh_token
|
Le jeton obtenu du flux de jetons serveur Web, utilisateur-agent ou application hybride. Cette valeur est un secret. Prenez les mesures appropriées pour la protéger. Ce paramètre est renvoyé uniquement si votre application connectée est configurée avec une étendue refresh_token. |
client_assertion
|
Au lieu de passer un client_secret, vous pouvez fournir un client_assertion et un client_assertion_type. Si aucun paramètre client_secret n'est fourni, Salesforce vérifie client_assertion et client_assertion_type. Consultez Utilisation de client_assertion au lieu de client_secret. |
client_assertion_type
|
Saisissez cette valeur en utilisant le paramètre La valeur de |
format
|
S'il n'est pas inclus dans l'en-tête de la requête, vous pouvez spécifier le format de retour attendu. Le paramètre
|
Salesforce accorde un nouveau jeton accès
Après avoir vérifié la requête, Salesforce envoie à l'application connectée une réponse contenant un nouveau jeton d'accès.
Voici un exemple de réponse JSON de Salesforce :
{
"id":"https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P",
"issued_at":"1278448384422",
"instance_url":"https://yourInstance.salesforce.com/",
"signature":"SSSbLO/gBhmmyNUvN18ODBDFYHzakxOMgqYtu+hDPsc=",
"access_token":"00Dx0000000BV7z!AR8AQP0jITN80ESEsj5EbaZTFG0RNBaT1cyWk7TrqoDjoNIWQ2ME_sTZzBjfmOE6zMHq6y8PIW4eWze9JksNEkWUl.Cju7m4",
"token_type":"Bearer",
"scope":"id api refresh_token"
}Voici un exemple de réponse XML :
<Oauth>
<access_token>00Dx0000000BV7z!AR8AQP0jITN80ESEsj5EbaZTFG0RNB
aT1cyWk7TrqoDjoNIWQ2ME_sTZzBjfmOE6zMHq6y8PIW4eWze9JksNEkWUl.Cju7m4
</access_token>
<token_type>Bearer
</token_type>
<scope>id api refresh_token
</scope>
<instance_url>https://yourInstance.salesforce.com/</instance_url>
<id>https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P</id>
<issued_at>1278448101416</issued_at>
<signature>CMJ4l+CCaPQiKjoOEwEig9H4wqhpuLSk4J2urAe+fVg=</signature>
</Oauth>Cet exemple montre une réponse codée en URL.
access_token=00Dx0000000BV7z%21AR8AQP0jITN80ESEsj5EbaZTFG0RNBaT1cyWk7TrqoDjoNIWQ2
ME_sTZzBjfmOE6zMHq6y8PIW4eWze9JksNEkWUl.Cju7m4
&token_type=Bearer&scope=id%20api%20refresh_token
&instance_url=https%3A%2F%2FyourInstance.salesforce.com
&id=https://login.salesforce.com%2Fid%2F00Dx0000000BV7z%2F005x00000012Q9P
&issued_at=1278448101416
&signature=CMJ4l%2BCCaPQiKjoOEwEig9H4wqhpuLSk4J2urAe%2BfVg%3DSi la rotation du jeton d'actualisation est activée pour l'application connectée ou l'application cliente externe, la réponse inclut un nouveau jeton d'actualisation. Voici un exemple de réponse JSON si la rotation du jeton d'actualisation est activée.
{
"access_token":"00Dx0000000BV7z!AR8AQP0jITN80ESEsj5EbaZTFG0RNBaT1cyWk7T...",
"refresh_token":"CjAwRHgwMDAwMDAwQlY3eiFBUjhBUVAwaklUTjgwRVNFc2o1RWJhWl...",
"signature":"SSSbLO/gBhmmyNUvN18ODBDFYHzakxOMgqYtu+hDPsc=",
"scope":"id api refresh_token",
"instance_url":"https://yourInstance.salesforce.com/",
"id":"https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P"
"token_type":"Bearer",
"issued_at":"1278448384422",
}Les paramètres ci-dessous peuvent être inclus dans le corps de la réponse.
| Paramètre | Description |
|---|---|
access_token
|
Le jeton OAuth utilisé par une application connectée pour demander l'accès à une ressource protégée au nom de l'application cliente. Des autorisations supplémentaires sous forme d'étendues peuvent accompagner le jeton d'accès. |
refresh_token
|
Un nouveau jeton d'actualisation. Utilisez le jeton d'actualisation pour obtenir un nouveau jeton d'accès lors de la prochaine invocation du flux de jeton d'actualisation. Ce paramètre est inclus uniquement si vous activez la rotation du jeton d'actualisation pour votre application connectée ou application cliente externe. |
token_type
|
Un type de jeton Bearer, utilisé pour toutes les réponses qui incluent un jeton d'accès. |
token_format
|
Si votre application connectée ou application cliente externe est activée pour émettre des jetons d'accès basés sur JWT (JSON Web Token), votre réponse inclut ce paramètre pour indiquer le format du jeton d'accès. La valeur est Ce paramètre n'est pas inclus si votre application émet des jetons d'accès opaques. |
instance_url
|
Une URL indiquant l'instance de l'organisation de l'utilisateur. Par exemple : https://yourInstance.salesforce.com/. |
id
|
Une URL d'identité qui peut être utilisée pour identifier l'utilisateur et pour demander plus d'informations sur l'utilisateur. Consultez URL d'identité. |
issued_at
|
Horodatage indiquant à quel moment la signature a été créée, en millisecondes. |
signature
|
La signature HMAC-SHA256 codée en Base64 signée par le client_secret. La signature peut contenir l'ID concaténé et issued_at value que vous pouvez utiliser, afin de vérifier que l'URL d'identité a changé depuis que le serveur l'a envoyée. |
sfdc_site_url
|
Si l'utilisateur est membre d'un site Experience Cloud, l'URL du site est fournie. |
sfdc_site_id
|
Si l'utilisateur est membre d'un site Experience Cloud, l'ID du site de l'utilisateur est fourni. |
