> ## 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.

> Dépannage des erreurs d’état invalide dans l’extension Login by Auth0 pour WordPress

# Résoudre les erreurs d’état invalide dans l’extension WordPress

Nous avons ajouté la validation du paramètre state à la version 3.6.0 de l’extension WordPress, que vous trouverez dans le dépôt GitHub [`auth0/wordpress`](https://github.com/auth0/wordpress/releases/tag/3.6.0). Cette mesure de sécurité aide à atténuer les attaques CSRF en veillant à ce que la réponse corresponde à une requête lancée par le même utilisateur. Pour en savoir plus, consultez [Prevent Attacks and Redirect Users with OAuth 2.0 State Parameter](/fr-CA/docs/secure/attack-protection/state-parameters).

<div id="how-state-validation-works">
  ## Comment fonctionne la validation du paramètre state
</div>

L’extension valide le paramètre state comme suit :

1. Elle définit un cookie `auth0_state` dans le navigateur au moyen de JavaScript lorsque le formulaire de connexion Lock est affiché (sur `wp-login.php` ou sur toute autre page lors de l’utilisation d’un shortcode ou d’un widget).
2. Elle transmet cette valeur au formulaire de connexion intégré de Lock afin qu’elle soit envoyée avec la requête d’authentification.
3. Elle reçoit cette valeur en retour d’Auth0, inchangée, dans un paramètre d’URL `state` si la connexion avec Auth0 a réussi.
4. Elle vérifie que la valeur reçue correspond à la valeur envoyée et stockée dans le cookie `auth0_state`. Si c’est le cas, le processus de connexion se poursuit. Sinon, le processus s’arrête et le message d’erreur « Invalid state » s’affiche.
5. Elle supprime le cookie, qu’il soit valide ou non.
6. Elle utilise les valeurs de l’objet décodé en Base64 pour rediriger l’utilisateur ou effectuer d’autres actions de connexion, si elles sont valides.

Ce processus devrait être entièrement transparent, tant pour l’utilisateur qui se connecte que pour l’administrateur du site. Le serveur Auth0 ne valide pas la valeur state et ne l’exige pas; il la retourne telle quelle à l’URL de rappel. Si le message « Invalid state » s’affiche, c’est qu’une des 4 premières étapes ci-dessus ne se produit pas.

<div id="common-causes-of-the-invalid-state-error">
  ## Causes courantes de l’erreur « invalid state »
</div>

Vous trouverez ci-dessous quelques causes courantes de l’erreur « invalid state », ainsi que des étapes de dépannage que vous pouvez suivre.

<div id="cached-callback-urls">
  ### URLs de rappel mises en cache
</div>

La cause la plus fréquente de l’erreur de state invalide est la mise en cache de l’URL de rappel sur le serveur.

Désactivez la mise en cache sur votre serveur pour toutes les URL indiquées dans le champ **Allowed Callback URLs** de [Auth0 Dashboard > Applications > Applications > Settings](https://manage.auth0.com/#/applications/\{yourClientId}/settings), puis testez de nouveau. De plus, désactivez la mise en cache de l’URL du site (`/index.php` dans une installation standard) si elle contient un paramètre d’URL Auth0.

Vérifiez également que l’heure de votre serveur est correctement réglée. L’erreur `BeforeValidException` peut se produire lorsque le jeton est considéré comme ayant été généré avant l’heure actuelle, ce qui peut arriver si l’heure du serveur est incorrecte. Vous pouvez vérifier l’heure du serveur à l’aide de `echo current_time( 'c' )`. Comme solution de contournement temporaire, vous pouvez aussi modifier l’extension pour ajouter un décalage horaire si vous ne pouvez pas changer l’heure du serveur, mais le problème devrait être corrigé avant la mise en production.

Si cela ne règle pas le problème, poursuivez avec les étapes de dépannage ci-dessous.

<div id="cached-cookies-and-url-parameters">
  ### Cookies et paramètres d’URL mis en cache
</div>

Si vous utilisez un hébergeur géré comme WP-Engine, vous devrez peut-être communiquer avec son équipe d’assistance pour obtenir de l’aide supplémentaire. Des problèmes nous ont été signalés concernant l’accès aux cookies requis sur l’URL de rappel, ainsi que lors de la vérification de l’authentification sur la page finale affichée aux utilisateurs après leur connexion. Plus précisément, demandez l’ajout d’exclusions de cache pour :

* **Cookie :** `auth0_state`
* **Cookie :** `auth0_nonce`
* **Paramètre d’URL/argument :** `auth0`
* **Paramètre d’URL/argument :** `code`
* **Paramètre d’URL/argument :** `state`
* **Paramètre d’URL/argument :** `id_token`

<div id="page-refresh-after-error-message">
  ### Rafraîchissement de la page après un message d’erreur
</div>

Si vous rafraîchissez la page après avoir vu un autre message d’erreur (vérification du courriel, etc.), le message « invalid state » s’affichera, car le système tente de valider de nouveau une valeur déjà utilisée. C’est normal.

<div id="cookie-names-requirement">
  ### Exigence concernant les noms de cookies
</div>

Certains hébergeurs, comme Pantheon, exigent l’utilisation de noms de cookies particuliers. Vous pouvez modifier le nom du cookie à l’aide du filtre `auth0_state_cookie_name` dans votre thème ou une extension personnalisée. Pour en savoir plus sur le filtre `auth0_state_cookie_name`, consultez [Étendre l’extension WordPress Login by Auth0](/fr-CA/docs/customize/integrations/cms/wordpress-plugin/extend-login-by-auth0). Pour plus d’informations, [consultez le ticket GitHub correspondant](https://github.com/auth0/wordpress/issues/494) et [examinez le correctif](https://github.com/auth0/wordpress/pull/495).

<div id="universal-login-page-and-link-building">
  ### Page Universal Login et création du lien
</div>

Si votre site utilise la page <Tooltip tip="Universal Login : votre application redirige vers Universal Login, hébergé sur le serveur d’autorisation d’Auth0, pour vérifier l’identité d’un utilisateur." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Universal+Login">Universal Login</Tooltip> et que vous construisez vous-même le lien dans un thème ou une extension, vous devez :

* Définir un cookie nommé `auth0_state` avec une valeur générée aléatoirement
* Transmettre cette valeur dans un paramètre d’URL `state`.

Sinon, vous pouvez aller à Settings > Features tab > Universal Login Page et rediriger les requêtes de connexion vers la page `wp-login.php`, où ce cookie et ce paramètre d’URL seront définis automatiquement.

<div id="visiting-the-callback-url-directly">
  ### Accès direct à l’URL de rappel
</div>

Si vous accédez directement à votre URL de rappel (généralement `yourdomain.com/index.php?auth0=1`) ou si vous y accédez une deuxième fois après l’échange du code d’autorisation, l’erreur « state invalide » peut s’afficher. Cela indique que le `state` a déjà été vérifié, puis supprimé.

<div id="troubleshoot-invalid-state-errors">
  ## Dépanner les erreurs de state invalide
</div>

Notez que certaines des étapes ci-dessous nécessitent d’interrompre le processus de connexion pendant l’opération (comme indiqué) :

1. En étant déconnecté de WordPress et d’Auth0, accédez à la page de connexion en cours de test.
2. Vérifiez si le cookie `auth0_state` est défini (dans Chrome, View > Developer > JavaScript Console > onglet Application > Storage à gauche > Cookies > domaine en cours de test; recherchez un cookie `auth0_state` dont la valeur n’est pas vide).

   * Si cette valeur n’est pas définie, vérifiez s’il y a des erreurs dans la console JS et assurez-vous que votre navigateur accepte les cookies (la connexion ne fonctionnera pas sans cookies).
   * Si la valeur est définie, copiez-la et affichez le code source de la page (dans Chrome, **View** > **Developer** > **View Source**). Recherchez cette valeur; elle devrait apparaître comme valeur associée au paramètre `wpAuth0LockGlobal.settings.auth.params.state` ([voir un exemple de JSON](https://gist.github.com/joshcanhelp/1b8bb990048325eb7214e2b3d7136b78)). Prenez cette valeur en note (vous en aurez besoin à une étape suivante).
3. Si la valeur y apparaît et que le formulaire Lock se charge normalement, cela signifie que les étapes 1 et 2 de la première liste ci-dessus fonctionnent correctement.
4. Avant de vous connecter, [ajoutez cet extrait de code au début de votre `wp-config.php`](https://gist.github.com/joshcanhelp/ba98f748747c7fd2ecdf54e73c6110f3) afin de pouvoir effectuer un test d’installation. **AVERTISSEMENT** : cela interrompra la connexion pour le site WordPress en cours de test; utilisez-le uniquement sur une installation hors production.
5. Connectez-vous normalement.
6. Après avoir été redirigé vers l’URL de rappel de votre site, le processus s’arrêtera. Vous devriez voir une sortie semblable à celle affichée dans le Gist lié à l’étape no 4 ci-dessus. Si vous voyez quelque chose comme `Array()` sans valeur supplémentaire, l’une des deux situations suivantes peut se produire :

   * L’URL de rappel de WordPress est mise en cache. La mise en cache des pages peut se produire de nombreuses façons; nous ne pouvons donc pas fournir d’étapes précises ici. Vérifiez les extensions de mise en cache que vous avez peut-être installées; elles offrent généralement un mécanisme d’exclusion d’URL. Vérifiez aussi auprès de votre hébergeur, car la mise en cache peut être automatique et nécessiter l’intervention du soutien technique.
   * Le serveur ne lit pas le cookie Auth0. Pour une solution possible, [consultez l’issue GitHub connexe](https://github.com/auth0/wordpress/issues/494) et [examinez son correctif](https://github.com/auth0/wordpress/pull/495).
7. Si les valeurs sont présentes, vérifiez les en-têtes de réponse de l’URL de rappel en cours de chargement (dans Chrome, View > Developer > JavaScript Console > onglet Network, cliquez sur le premier "document" affiché avec un état 500 et cherchez "Response Headers"). Recherchez tout indice de mise en cache, comme un `Cache-Control` avec un `max-age` différent de zéro, un `x-cache` autre que `MISS`, ou tout autre indice montrant que cette page est servie à partir d’un cache.
8. Toujours dans les en-têtes de réponse, vérifiez que `set-cookie` inclut une directive comme `auth0_state=deleted` pour confirmer que le processus de validation a bien lieu.
9. Assurez-vous que le paramètre `state` dans l’URL correspond à celui enregistré à partir du cookie défini à l’étape no 3 ci-dessus.
10. S’il n’y a aucun indice de mise en cache, supprimez l’extrait de débogage de `wp-config.php` et actualisez l’URL de rappel. Vous devriez voir de nouveau le message "Invalid state". Si des changements liés à la mise en cache ont été apportés, refaites le processus de connexion du début à la fin (assurez-vous d’effacer vos cookies et le cache de votre navigateur pour le site avant de tester).

Les étapes de dépannage suivantes nécessitent des modifications à l’extension qui interrompront le processus de connexion et devront être annulées une fois terminées. Ces étapes doivent être effectuées sur un serveur de test ou de préproduction.

11. Ensuite, nous devons vérifier pourquoi le state est transmis, mais ne correspond pas à la valeur stockée.

12. Dans `lib/WP_Auth0_LoginManager.php`, affichez les valeurs du state stocké et du state renvoyé, puis arrêtez le processus. Juste avant [la ligne 148](https://github.com/auth0/wp-auth0/blob/master/lib/WP_Auth0_LoginManager.php#L148), ajoutez :

```bash wrap lines theme={null}
echo '<h1>$_REQUEST</h1>'; var_dump($_REQUEST); echo '<h1>$_COOKIE</h1>'; var_dump($_COOKIE); die('<h1>Done</h1>');
```

13. Encore une fois, assurez-vous d’être déconnecté, puis effectuez la procédure de connexion.

14. Vous devriez voir des valeurs s’afficher lors de la redirection vers l’URL de rappel WordPress.

15. Vérifiez que la valeur `state` dans `$_REQUEST` existe et qu’elle correspond à la valeur `auth0_state` dans `$_COOKIE`.

* Si elle est différente, elle doit correspondre à la valeur d’origine consignée à l’étape 3 ci-dessus. Cela signifie que la valeur `state` de `$_COOKIE` a changé à un moment donné du processus.

Si aucune des étapes ci-dessus ne permet de résoudre le problème, veuillez recueillir les résultats de ces étapes et [communiquer avec le soutien technique](https://support.auth0.com/center/s/) ou [publier dans la communauté](https://community.auth0.com/tag/wordpress) avec l’étiquette `wordpress`. Incluez également :

* Version de PHP
* Version de WordPress
* Version de l’extension Auth0
* Navigateur et système d’exploitation utilisés pour le test
* Un [fichier HAR](https://support.auth0.com/center/s/article/generate-and-analyze-har-files-to-troubleshoot-auth0-issues) enregistrant l’ensemble du processus, du chargement de la page contenant le formulaire de connexion jusqu’au message « Invalid state ».

  <Warning>
    Avant de partager un fichier HAR avec qui que ce soit (y compris Auth0), assurez-vous de supprimer ou d’obfusquer toutes les données sensibles, telles que :

    * Renseignements confidentiels sur l’utilisateur
    * Renseignements personnels identifiables (PII)
    * Renseignements confidentiels sur l’application

    Pour en savoir plus, consultez les articles suivants dans le Centre de soutien Auth0 :

    * [Sanitizing HTTP Traces](https://support.auth0.com/center/s/article/How-to-Remove-Secrets-from-a-har-File)
    * [How to Sanitize an HTTP Trace File Automatically](https://support.auth0.com/center/s/article/How-to-Sanitize-a-HTTP-Trace-File-Automatically)
    * [How to Manually Redact Sensitive Information](https://support.auth0.com/center/s/article/How-to-Manually-Redact-Sensitive-Information)
    * [HAR File is Too Large to Upload to the Support Case](https://support.auth0.com/center/s/article/HAR-File-is-too-Large-to-Upload-to-the-Support-Case)
  </Warning>

<div id="related-posts">
  ## Articles connexes
</div>

* [Erreur « Invalid state » lors de la redirection d’Auth0 vers WordPress](https://community.auth0.com/t/invalid-state-error-during-auth0-wordpress-redirect/12552/16) dans la communauté Auth0
* [« Invalid state » lorsque l’URL de rappel est consultée directement](https://wordpress.org/support/topic/unable-to-resolve-troubleshooting-with-a-client-grant-for-already-exists/) sur wordpress.org
