auth0/wordpress. Esta medida de seguridad ayuda a mitigar ataques CSRF al garantizar que la respuesta pertenezca a una solicitud iniciada por el mismo usuario. Para obtener más información, consulta Prevenir ataques y redirigir a los usuarios con el parámetro state de OAuth 2.0.
Cómo funciona la validación del estado
- Establece una cookie
auth0_stateen el navegador mediante Javascript cuando se muestra el formulario de Login de Lock (enwp-login.phpo en cualquier otra página al usar un shortcode o un widget). - Pasa ese valor al formulario de inicio de sesión integrado de Lock para que se envíe con la solicitud de autenticación.
- Recibe ese valor de vuelta desde Auth0 sin cambios en un parámetro URL
statesi el inicio de sesión con Auth0 se realizó correctamente. - Valida que el valor recibido coincida con el valor enviado y almacenado en la cookie
auth0_state. Si es válido, el proceso de inicio de sesión continúa. Si no, el proceso se detiene y se muestra un mensaje de error de “Estado no válido”. - Elimina la cookie, independientemente de si es válido o no.
- Usa valores del objeto decodificado en base64 para redirigir o realizar otras acciones de inicio de sesión, si es válido.
Causas comunes del error de estado no válido
URLs de devolución de llamada en caché
/index.php en una instalación normal) si incluye un parámetro de URL de Auth0.
Compruebe que la hora del servidor esté configurada correctamente. El error BeforeValidException puede producirse cuando parece que el token se generó antes de la hora actual, algo que puede ocurrir si el reloj del servidor está desajustado. Puede comprobar la hora del servidor usando echo current_time( 'c' ). Como solución temporal, también puede modificar el complemento para añadir un desfase horario si no puede cambiar la hora del servidor, pero esto debe corregirse para producción.
Si eso no resuelve el problema, continúe con los pasos de solución de problemas que se indican a continuación.
Si está en un servicio de hosting administrado como WP-Engine, es posible que deba ponerse en contacto con su equipo de soporte para obtener ayuda adicional. Hemos recibido informes de problemas para acceder a las cookies necesarias en la URL de devolución de llamada, así como problemas al verificar la autenticación en la página final que ven los usuarios después de iniciar sesión. En concreto, solicite que se agreguen exclusiones de caché para:
- Cookie:
auth0_state - Cookie:
auth0_nonce - Arg/parámetro de URL:
auth0 - Arg/parámetro de URL:
code - Arg/parámetro de URL:
state - Arg/parámetro de URL:
id_token
Recarga de la página después de un mensaje de error
auth0_state_cookie_name en tu tema o en un plugin personalizado. Para obtener más información sobre el filtro auth0_state_cookie_name, consulta Extiende el plugin de WordPress Login by Auth0. Para obtener información adicional, consulta el issue relacionado en GitHub y revisa su corrección.
Página de Universal Login y creación de enlaces
- Establecer una cookie llamada
auth0_statecon un valor generado aleatoriamente - Enviar ese valor en un parámetro de URL
state.
wp-login.php, donde esa cookie y ese parámetro de URL se establecerán automáticamente.
Acceder directamente a la URL de devolución de llamada
yourdomain.com/index.php?auth0=1) o vuelve a hacerlo después de que se haya intercambiado el código de autorización, es posible que aparezca el error de estado no válido. Esto indica que el estado ya se ha verificado y eliminado.
Solucionar problemas de errores de estado no válido
- Con la sesión cerrada en WordPress y Auth0, visita la página de Login que estás probando.
-
Comprueba si se está estableciendo la cookie
auth0_state(en Chrome, View > Developer > JavaScript Console > Application tab > Storage a la izquierda > Cookies > dominio que se está probando; busca una cookieauth0_statecon un valor no vacío).- Si este valor no está establecido, comprueba si hay errores en la consola de JS y asegúrate de que tu navegador pueda aceptar cookies (el Login no funcionará sin cookies).
- Si el valor está establecido, cópialo y visualiza el código fuente de la página (en Chrome, View > Developer > View Source). Busca el valor; debería aparecer como el valor asociado al parámetro
wpAuth0LockGlobal.settings.auth.params.state(ver JSON de ejemplo). Toma nota de este valor (lo necesitarás en un paso posterior).
- Si el valor aparece allí y el formulario de Lock se carga con normalidad, entonces los pasos 1 y 2 de la primera lista anterior están funcionando correctamente.
-
Antes de iniciar sesión, agrega este fragmento de código al principio de tu
wp-config.phppara poder hacer una instalación de prueba. ADVERTENCIA: Esto interrumpirá el Login del sitio de WordPress que se está probando, así que úsalo solo en una instalación que no sea de producción. - Inicia sesión normalmente.
-
Después de que se te redirija de vuelta a la URL de devolución de llamada de tu sitio, el proceso se detendrá. Deberías ver una salida como la que se muestra en el Gist enlazado en el paso n.º 4 anterior. Si ves algo como
Array()sin valores adicionales, podría estar ocurriendo una de estas dos cosas:- La URL de devolución de llamada de WordPress está almacenada en caché. El almacenamiento en caché de páginas puede producirse de muchas formas distintas, por lo que no podemos proporcionar pasos concretos aquí. Revisa cualquier plugin de caché que tengas instalado; normalmente incluyen algún tipo de exclusión de URL. Consulta también con tu proveedor de hosting, ya que el almacenamiento en caché puede ser automático y requerir la intervención del equipo de soporte.
- El servidor no está leyendo la cookie de Auth0. Para una posible solución, consulta el issue relacionado en GitHub y revisa su corrección.
-
Si los valores están presentes, comprueba los encabezados de respuesta de la URL de devolución de llamada que se está cargando (en Chrome, View > Developer > JavaScript Console > Network tab, haz clic en el primer “document” listado con un estado 500 y busca “Response Headers”). Busca cualquier indicio de almacenamiento en caché, como un
Cache-Controlcon unmax-agedistinto de cero, unx-cachecon un valor distinto deMISSo cualquier otra pista de que esta página se está sirviendo desde una caché. -
También en los encabezados de respuesta, comprueba que
set-cookieincluya una directiva comoauth0_state=deletedpara confirmar que el proceso de validación se está llevando a cabo. -
Asegúrate de que el parámetro
statede la URL coincida con el registrado a partir de la cookie establecida en el paso n.º 3 anterior. -
Si no hay indicios de almacenamiento en caché, elimina el fragmento de depuración de
wp-config.phpy vuelve a cargar la URL de devolución de llamada. Deberías volver a ver el mensaje “Estado no válido”. Si se hicieron cambios en la caché, intenta completar todo el proceso de Login (asegúrate de borrar las cookies y la caché del navegador del sitio antes de hacer la prueba).
- A continuación, debemos comprobar por qué el estado llega pero no coincide con el valor almacenado.
-
En
lib/WP_Auth0_LoginManager.php, muestra los valores del estado almacenado y del estado devuelto, y detén el proceso a continuación. Justo antes de la línea 148, agrega:
- Una vez más, asegúrate de haber cerrado sesión y completa el proceso de Login.
- Deberías ver valores en la salida cuando se te redirija de nuevo a la URL de devolución de llamada de WordPress.
-
Comprueba si el valor de
stateen$_REQUESTexiste y coincide con el valor deauth0_stateen$_COOKIE.
- Si es diferente, debe coincidir con el valor original registrado en el paso n.º 3 anterior. Esto significa que el valor de estado de
$_COOKIEha cambiado en algún momento del proceso.
wordpress. Incluye también:
- Versión de PHP
- Versión de WordPress
- Versión del plugin de Auth0
- Navegador y sistema operativo utilizados para la prueba
- Un archivo HAR que registre todo el proceso, desde la carga de la página con el formulario de inicio de sesión hasta el mensaje “Estado no válido”. Para obtener más información sobre los archivos HAR, consulta Generate and Analyze HAR Files.
- Error de “Estado no válido” durante la redirección de Auth0 en WordPress en Auth0 Community
- Estado no válido al visitar directamente la URL de devolución de llamada en wordpress.org