> ## 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 le plugin WordPress Login by Auth0

# Résoudre les erreurs d’état invalide du plugin WordPress Login by Auth0

Nous avons ajouté la validation de l’état à la version 3.6.0 du plugin WordPress Login by Auth0, 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 initiée par le même utilisateur. Pour en savoir plus, consultez [Prévenir les attaques et rediriger les utilisateurs avec le paramètre state d’OAuth 2.0](/docs/fr-ca/secure/attack-protection/state-parameters).

<div id="how-state-validation-works">
  ## Fonctionnement de la validation de `state`
</div>

Le plugin effectue la validation de `state` en :

1. définissant 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. transmettant cette valeur au formulaire de connexion intégré Lock afin qu’elle soit envoyée avec la requête d’authentification;
3. recevant cette valeur en retour d’Auth0, inchangée, dans un paramètre d’URL `state` si la connexion Auth0 a réussi;
4. validant que la valeur reçue correspond à la valeur envoyée et stockée dans le cookie `auth0_state`. Si elle est valide, le processus de connexion se poursuit. Sinon, le processus s’arrête et le message d’erreur « Invalid state » s’affiche;
5. supprimant le cookie, qu’il soit valide ou non;
6. utilisant 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 complètement opaque, tant pour l’utilisateur qui se connecte que pour l’admin du site. Le serveur Auth0 ne valide pas et n’exige pas de valeur `state`, et il la renvoie telle quelle à l’URL de rappel. Si le message « Invalid state » s’affiche, c’est que l’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 d’état invalide
</div>

Vous trouverez ci-dessous quelques causes courantes de l’erreur d’état invalide, ainsi que des étapes de dépannage à suivre.

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

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

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

Vérifiez aussi que l’heure de votre serveur est correctement réglée. L’erreur `BeforeValidException` peut se produire lorsque le token semble avoir été généré avant l’heure actuelle, ce qui peut arriver si l’heure du serveur n’est pas exacte. Vous pouvez vérifier l’heure du serveur en utilisant `echo current_time( 'c' )`. Comme solution temporaire, vous pouvez aussi modifier le Plugin pour ajouter un décalage horaire si vous ne pouvez pas changer l’heure du serveur, mais cela devrait être corrigé pour la 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 mis en cache et paramètres d’URL
</div>

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

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

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

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

<div id="cookie-names-requirement">
  ### Exigence relative aux noms des cookies
</div>

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

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

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

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

Sinon, vous pouvez aller à Settings > Features tab > Universal Login Page et rediriger les demandes 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éder directement à 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 invalid state peut s’afficher. Cela indique que le state a déjà été vérifié et supprimé.

<div id="troubleshoot-invalid-state-errors">
  ## Résoudre les erreurs « invalid state »
</div>

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

1. Après vous être déconnecté de WordPress et d’Auth0, accédez à la page de connexion à tester.
2. Vérifiez si le cookie `auth0_state` est défini (dans Chrome, View > Developer > JavaScript Console > onglet Application > Storage à gauche > Cookies > domain à tester; cherchez 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 cookie).
   * Si la valeur est définie, copiez-la et affichez le code source de la page (dans Chrome, **View** > **Developer** > **View Source**). Recherchez la valeur; elle devrait apparaître comme la 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 dans une étape suivante).
3. Si la valeur y apparaît et que le formulaire Lock se charge normalement, c’est 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 faire une installation de test. **WARNING** : cela empêchera la connexion au site WordPress testé, alors utilisez-le uniquement sur une installation hors production.
5. Connectez-vous normalement.
6. Une fois redirigé vers l’URL de rappel de votre site, le processus s’arrêtera. Vous devriez voir une sortie semblable à celle du Gist lié à l’étape #4 ci-dessus. Si vous voyez quelque chose comme `Array()` sans valeurs supplémentaires, 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 intégré. Vérifiez aussi auprès de votre hébergeur, car la mise en cache peut être automatique et nécessiter l’intervention du soutien.
   * 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 chargée (dans Chrome, View > Developer > JavaScript Console > onglet Network, cliquez sur le premier « document » affichant un statut 500 et cherchez « Response Headers »). Recherchez tout indice de mise en cache, comme un `Cache-Control` avec un `max-age` non nul, un `x-cache` autre que `MISS`, ou tout autre signe indiquant 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 consigné à partir du cookie défini à l’étape #3 ci-dessus.
10. S’il n’y a aucun indice de mise en cache, retirez l’extrait de débogage de `wp-config.php` et actualisez l’URL de rappel. Vous devriez voir réapparaître le message « Invalid state ». Si des changements liés à la mise en cache ont été apportés, reprenez le processus de connexion du début à la fin (assurez-vous d’effacer vos cookies et le cache du navigateur pour le site avant de tester).

Les étapes de troubleshooting suivantes nécessitent des modifications de 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 staging.

11. Nous devons ensuite 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 retourné, 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é et terminez le processus de connexion.

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

15. Vérifiez si la valeur `state` dans `$_REQUEST` existe et correspond à la valeur `auth0_state` dans `$_COOKIE`.

* Si c’est différent, cela devrait correspondre à la valeur d’origine consignée à l’étape #3 ci-dessus. Cela signifie que la valeur de state dans `$_COOKIE` a changé quelque part dans le processus.

Si aucune des étapes ci-dessus ne résout le problème, veuillez recueillir les résultats de ces étapes et [contacter le soutien](https://support.auth0.com/center/s/) ou [publier dans la Community](https://community.auth0.com/tag/wordpress) avec l’étiquette `wordpress`. Veuillez aussi inclure :

* La version de PHP
* La version de WordPress
* La version du plugin Auth0
* Le navigateur et le 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 :

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

    Pour en savoir plus, consultez les articles suivants dans le Auth0 Support Center :

    * [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 Auth0 WordPress](https://community.auth0.com/t/invalid-state-error-during-auth0-wordpress-redirect/12552/16) dans Auth0 Community
* [Invalid state en accédant directement à l’URL de rappel](https://wordpress.org/support/topic/unable-to-resolve-troubleshooting-with-a-client-grant-for-already-exists/) sur wordpress.org
