> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-docs-event-stream-action-templates.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Dépannage des erreurs d’état non valide des plugins WordPress

> Dépannage des erreurs d’état non valide dans le plugin WordPress Login by Auth0

Nous avons ajouté la validation des états à la version 3.6.0 du plugiciel WordPress, qui se trouve dans le [dépôt GitHub wp-auth0](https://github.com/auth0/wp-auth0/releases/tag/3.6.0). Cette mesure de sécurité permet d’atténuer les attaques CSRF en garantissant que la réponse correspond à une demande initiée par le même utilisateur. Pour en savoir plus, consultez [Prévenir les attaques et rediriger les utilisateurs avec le paramètre d’état OAuth 2.0](/docs/fr-ca/secure/attack-protection/state-parameters).

## Fonctionnement de la validation des états

Le plugin effectue la validation d’état en :

1. Définissant un témoin `auth0_state` dans le navigateur à partir de Javascript lorsque le formulaire de connexion Lock est affiché (sur `wp-login.php` ou sur toute autre page lorsque vous utilisez un code court ou un gadget logiciel).
2. Transmettant cette valeur au formulaire de connexion intégré Lock afin qu’elle soit envoyée avec la demande d’authentification.
3. Recevant cette valeur inchangée d’Auth0 dans un paramètre URL `state` si la connexion Auth0 a été réussie.
4. Validant que la valeur reçue correspond à la valeur envoyée et stockée dans le témoin `auth0_state`. Si la valeur est valide, le processus de connexion se poursuit. Dans le cas contraire, le processus s’arrête et le message d’erreur « État non valide » s’affiche.
5. Suppression du témoin, quelle que soit sa validité.
6. Utilisation des valeurs de l’objet décodé en base64 pour rediriger ou effectuer d’autres actions de connexion, si elles sont valides.

Ce processus doit être totalement opaque pour l’utilisateur qui se connecte et pour l’administrateur du site. Le serveur Auth0 ne valide pas ou n’exige pas de valeur d’état et la renvoie intacte à l’URL de rappel. Si le message « État non valide » s’affiche, c’est que l’une des quatre premières étapes ci-dessus a échoué.

## Causes courantes de l’erreur « État non valide »

Vous trouverez ci-dessous les causes les plus courantes de l’erreur « État non valide » ainsi que les mesures de dépannage que vous pouvez prendre.

### URL de rappel mis en cache

La cause la plus fréquente de l’erreur « État non valide » 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 **URL de rappel autorisées** dans [Dashboard Auth0 > Applications > Applications > Paramètres](https://manage.auth0.com/#/applications/\{yourClientId}/settings) et testez à nouveau. En outre, excluez la mise en cache de l’URL du site (`/index.php` sur une installation normale) si elle comporte un paramètre URL Auth0.

Vérifiez si l’heure de votre serveur est incorrecte. L’erreur `BeforeValidException` peut se produire lorsque le jeton est perçu comme ayant été généré avant l’heure actuelle, ce qui peut se produire si l’heure du serveur est décalée. Vous pouvez vérifier l’heure de votre serveur en utilisant `echo current_time( ’c’ )`. Une solution temporaire peut également consister à modifier le plugin pour ajouter un décalage horaire si vous ne parvenez pas à modifier l’heure du serveur, un problème qui devrait toutefois être résolu pour la production.

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

### Témoins et paramètres URL mis en cache

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

* **Témoin :**`auth0_state`
* **Témoin :**`auth0_nonce`
* **Paramètre Arg/URL :**`auth0`
* **Paramètre Arg/URL :**`code`
* **Paramètre Arg/URL :**`state`
* **Paramètre Arg/URL :**`id_token`

### Actualisation de la page après un message d’erreur

Si vous actualisez la page après avoir obtenu un autre message d’erreur (vérification de l’adresse électronique, etc.), le message "« État non valide » s’affichera pour tenter de revalider une valeur déjà utilisée. Ce comportement est normal.

### Exigences en matière de noms de témoins

Certains hôtes, comme Pantheon, exigent que des noms de témoins spécifiques soient utilisés. Vous pouvez modifier le nom du témoin en utilisant le filtre `auth0_state_cookie_name` dans votre thème ou dans un plugiciel personnalisé. Pour en savoir plus sur le filtre `auth0_state_cookie_name`, consultez [Plugin WordPress Extend Login by Auth0](/docs/fr-ca/customize/integrations/cms/wordpress-plugin/extend-login-by-auth0). Pour plus d’informations, [consultez le problème GitHub associé](https://github.com/auth0/wp-auth0/issues/494) et [explorez son correctif](https://github.com/auth0/wp-auth0/pull/495).

### Page de connexion universelle et création de liens

Si votre site utilise la page de connexion universelle et que vous créez vous-même le lien dans un thème ou un plugin, vous devez :

* Définir un témoin appelé `auth0_state` avec une valeur générée de manière aléatoire
* Envoyer cette valeur dans un paramètre URL `state`.

Vous pouvez également aller dans Paramètres > onglet Fonctionnalités > Page de connexion universelle et rediriger les demandes de connexion vers la page `wp-login.php` où ce témoin et ce paramètre URL seront définis automatiquement. Si vous souhaitez continuer à utiliser une URL `/authorize` personnalisée, vous pouvez [afficher le code qui exécute ce processus dans le dépôt GitHub](https://github.com/auth0/wp-auth0/blob/master/lib/WP_Auth0_LoginManager.php#L90).

### Visiter l’URL de rappel directement

Si vous visitez votre URL de rappel (typiquement `yourdomain.com/index.php?auth0=1`) directement ou une seconde fois après l’échange du code d’autorisation, l’erreur « État non valide » peut s’afficher. Cela indique que l’état a déjà été vérifié et supprimé.

## Dépannage des erreurs d’état non valide

Notez que certaines des étapes ci-dessous nécessiteront que le processus de connexion soit interrompu pendant le processus (marqué comme tel) :

1. Lorsque vous êtes déconnecté de WordPress et d’Auth0, visitez la page de connexion testée.
2. Vérifiez que le témoin `auth0_state` est défini (dans Chrome, Affichage > Développeur > Console JavaScript > Onglet Application > Stockage à gauche > Témoins > domaine testé, recherchez un témoin `auth0_state` dont la valeur n’est pas vide).

   * Si cette valeur n’est pas définie, vérifiez les erreurs dans la console JS et assurez-vous que votre navigateur accepte les témoins (la connexion ne fonctionnera pas sans témoins). Cette valeur est définie dans le fichier `/assets/js/lock-init.js`. Vous pouvez [consulter ce code sur GitHub](https://github.com/auth0/wp-auth0/blob/master/assets/js/lock-init.js#L22).
   * Si la valeur est définie, copiez-la et affichez le code source de la page (dans Chrome, **Affichage** > **Développeur** > **Afficher la source**). Recherchez la valeur, qui doit être associée au paramètre `wpAuth0LockGlobal.settings.auth.params.state` ([voir l’exemple JSON](https://gist.github.com/joshcanhelp/1b8bb990048325eb7214e2b3d7136b78)). Notez cette valeur (vous en aurez besoin à l’étape suivante).
3. Si la valeur apparaît et que le formulaire Lock se charge normalement, les étapes 1 et 2 de la première liste ci-dessus fonctionnent correctement.
4. Avant de vous connecter, [ajoutez cet extrait de code en haut de votre `wp-config.php`](https://gist.github.com/joshcanhelp/ba98f748747c7fd2ecdf54e73c6110f3), afin de pouvoir effectuer une installation test. **ATTENTION** : cette opération interrompra la connexion pour le site WordPress testé, donc utilisez-la 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ête. Vous devriez voir une sortie comme celle montrée dans le contenu essentiel (Gist) de l’étape 4 ci-dessus. Si vous voyez quelque chose comme `Array()` sans aucune valeur supplémentaire, l’une des deux choses suivantes peut se produire :

   * L’URL de rappel WordPress est mise en cache. La mise en cache des pages peut se faire de différentes manières, raison pour laquelle nous ne pouvons pas vous fournir de marche à suivre explicite. Vérifiez les plugins de mise en cache que vous avez installés, ils intègrent généralement une forme d’exclusion d’URL. Vérifiez également auprès de votre hébergeur que la mise en cache peut être automatisée et nécessiter l’intervention du service d’assistance.
   * Le serveur ne lit pas le témoin Auth0. Pour trouver une solution possible, [consultez le problème GitHub associé](https://github.com/auth0/wp-auth0/issues/494) et [explorez son correctif](https://github.com/auth0/wp-auth0/pull/495).
7. Si les valeurs sont présentes, vérifiez les en-têtes de réponse pour l’URL de rappel chargée (dans Chrome, Affichage > Développeur > Console JavaScript > Onglet Réseau, cliquez sur le premier « document » listé avec un statut 500 et recherchez « En-têtes de réponse »). Recherchez ici toute preuve de mise en cache, comme un `Cache-Control` avec un `max-age` non nul, un `x-cache` autre que `MISS`, ou tout autre indice montrant que cette page est servie à partir d’un cache.
8. Dans les en-têtes de réponse, vérifiez également que `set-cookie` inclut une directive telle que `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é dans le témoin défini à l’étape 3 ci-dessus.
10. Si aucune trace de mise en cache n’est visible, supprimez l’extrait de débogage de `wp-config.php` et actualisez l’URL de rappel. Vous devriez voir à nouveau le message « Invalid state (État non valide) ». Si des modifications ont été apportées à la mise en cache, effectuez le processus de connexion dans son intégralité (veillez à effacer les témoins et le cache de votre navigateur avant de procéder au test).

Les étapes de dépannage suivantes nécessitent des modifications du plugin 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 un serveur intermédiaire.

11. Ensuite, nous devons vérifier pourquoi l’état est reçu mais ne correspond pas à la valeur stockée.

12. Dans `lib/WP_Auth0_LoginManager.php`, affichez les valeurs de l’état stocké et de l’état retourné et arrêtez le processus une fois terminé. 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 complétez la procédure de connexion.

14. Les valeurs doivent être affichées lorsque vous êtes redirigé vers l’URL de rappel de WordPress.

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

* Si cette valeur est différente, elle doit correspondre à la valeur d’origine enregistrée à l’étape 3 ci-dessus. Cela signifie que la valeur de l’état `$_COOKIE` a changé au cours du processus.

Si aucune des étapes ci-dessus ne résout le problème, veuillez rassembler les résultats des étapes ci-dessus et [communiquer avec l’équipe de soutien](https://support.auth0.com/) ou [publier un message sur Community](https://community.auth0.com/tags/wordpress) avec le mot-clé `wordpress`. Incluez également :

* Version de PHP
* Version de WordPress
* Version du plugin Auth0
* Navigateur et système d’exploitation utilisés pour le test
* Un fichier HAR enregistre l’ensemble du processus, depuis le chargement de la page avec le formulaire de connexion jusqu’au message « État non valide » Pour en savoir plus sur les fichiers HAR, lisez [Générer et analyser des fichiers HAR](/docs/fr-ca/troubleshoot/troubleshooting-tools/generate-and-analyze-har-files).

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

    * les informations confidentielles de l’utilisateur
    * les informations personnelles identifiables (PII)
    * les informations confidentielles relatives à l’application

    Pour en savoir plus, consultez les articles suivants sur [Communauté Auth0](https://community.auth0.com) :

    * [Assainissement des traces HTTP](https://community.auth0.com/t/sanitizing-http-traces/119488)
    * [Comment assainir automatiquement un fichier de trace HTTP](https://community.auth0.com/t/how-to-sanitize-a-http-trace-file-automatically/120583)
    * [Comment caviarder manuellement des informations sensibles](https://community.auth0.com/t/how-to-manually-redact-sensitive-information/122554)
    * [Fichier HAR trop volumineux pour être téléversé dans le dossier d’assistance](https://community.auth0.com/t/har-file-is-too-large-to-upload-to-the-support-case/122488)
  </Warning>

## Billets associés

* [Erreur « État non valide » lors de la redirection Auth0 WordPress](https://community.auth0.com/t/invalid-state-error-during-auth0-wordpress-redirect/12552/16) dans Auth0 Community
* [État non valide lorsque vous visitez l’URL de rappel directement](https://wordpress.org/support/topic/unable-to-resolve-troubleshooting-with-a-client-grant-for-already-exists/) sur wordpress.org
