La información de estado de SimpleSAMLphp se pierde

7 minutos de lectura

avatar de usuario
andres cooper

Tengo un proveedor de servicios establecido en https://biz.dev.originsystems.co.za. Tengo un IdP configurado en http://stage.originsystems.co.za.

Al probar la autenticación con la herramienta en https://biz.dev.originsystems.co.za/simplesaml/module.php/core/authenticate.php, todo funciona bien. Vuelve al sitio de desarrollo con los atributos requeridos y todo es feliz y alegre.

Sin embargo, cuando intento acceder al IdP en código en https://biz.dev.originsystems.co.za, se me redirige a la página de inicio de sesión de Stage, pero después de iniciar sesión aparece el error “Información de estado perdida”. Obtengo la siguiente información de depuración:

SimpleSAML_Error_NoState: NOSTATE

Backtrace:
2 /webdevroot/Updraft/web/external/System/SSO/simplesaml/lib/SimpleSAML/Auth/State.php:225 (SimpleSAML_Auth_State::loadState)
1 /webdevroot/Updraft/web/external/System/SSO/simplesaml/modules/saml/www/sp/saml2-acs.php:63 (require)
0 /webdevroot/Updraft/web/external/System/SSO/simplesaml/www/module.php:134 (N/A)

Realicé todas las tareas de resolución de problemas que me pidió la página, pero la situación persiste.

Abrí las herramientas de desarrollo en el navegador y observé la información de las cookies. Las cookies para biz.dev.originsystems.co.za incluyen un SimpleAMLAuthToken, así que supongo que las cookies funcionan. El código que estoy usando para acceder al IdP es:

$as = new SimpleSAML_Auth_Simple("stage-sso-sp");
$as->requireAuth();
$attributes = $as->getAttributes();
print_r($attributes);

ACTUALIZAR:

Aquí hay más información…

Quería determinar si el problema estaba en cómo configuré el IdP, así que comencé a usar SSO Circle para el IdP. La información del estado también se pierde después de la autenticación en SSO Circle. Creo que eso significa que el problema está en alguna parte con la configuración de mi proveedor de servicios para SimpleSAML. Esto es lo que está pasando…

Cuando voy a la página Fuentes de autenticación de prueba de SimpleSAML en https://biz.stage.originsystems.co.za/simplesaml Tengo los siguientes valores de cookies…

Name                                       Value
SimpleSAMLAuthToken                        _a53569c0701dd02832532df14cf10cd0b2d9fcd6b6
biz.stage.originsystems.co.za              10fc356e0bfbf707af5fa5854c378755
ccof                                       RGN002
xbrF                                       84aadc624fc51c0c9340d45645c08643

Todo excepto SimpleSAMLAuthToken es de nuestra aplicación y no debería afectar a SimpleSAML. Una vez que soy redirigido a SSO Circle y autenticado, vuelvo a mi página SimpleSAML y el token de autenticación ahora tiene un valor de _39679e07cb1911e08b2bff3580a9929faddd07e9b6 y toda la información relevante se devuelve correctamente. El archivo de registro muestra la siguiente actividad.

Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Received SAML2 Response from 'http://idp.ssocircle.com'.
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] No certificate in message when validating against fingerprint.
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Found 1 certificates in SAML2_Assertion
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Has 1 candidate keys for validation.
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Validation with key #0 succeeded.
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Filter config for http://idp.ssocircle.com->https://biz.stage.originsystems.co.za/simplesaml/module.php/saml/sp/metadata.php/default-sp: array (  0 =>   sspmod_core_Auth_Process_LanguageAdaptor::__set_state(array(     'langattr' => 'preferredLanguage',     'priority' => 90,  )),)
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Deleting state: '_742b094314383407864f56bccc6afd7de3dcb3211e'
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Session: doLogin("default-sp")
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Session: Valid session found with 'default-sp'.
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Session: Valid session found with 'default-sp'.
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Template: Reading [/OriginSystems/application/Updraft/web/external/System/SSO/simplesaml/dictionaries/status]
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Template: Reading [/OriginSystems/application/Updraft/web/external/System/SSO/simplesaml/dictionaries/attributes]
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Template: Reading [/OriginSystems/application/Updraft/web/external/System/SSO/simplesaml/modules/core/dictionaries/frontpage]

Si voy a https://biz.stage.originsystems.co.za?ccof=RGN002, soy redirigido como espero que sea a SSO Circle donde luego me autentico. En este momento mi token de autenticación tiene un valor de _39679e07cb1911e08b2bff3580a9929faddd07e9b6. Una vez que me autentiqué, me dirigieron a una página de error de SimpleSAML “Información de estado perdida” y el token de autenticación todavía está _39679e07cb1911e08b2bff3580a9929faddd07e9b6.

El registro dice…

Feb 02 13:08:31 simplesamlphp DEBUG [8abc64dd04] Loading state: '_498e7d4d75bb7716e5e8cf905e0da5ef1c40cf1b3f'
Feb 02 13:08:31 simplesamlphp ERROR [8abc64dd04] SimpleSAML_Error_NoState: NOSTATE
Feb 02 13:08:31 simplesamlphp ERROR [8abc64dd04] Backtrace:
Feb 02 13:08:31 simplesamlphp ERROR [8abc64dd04] 2 /OriginSystems/application/Updraft/web/external/System/SSO/simplesaml/lib/SimpleSAML/Auth/State.php:225 (SimpleSAML_Auth_State::loadState)
Feb 02 13:08:31 simplesamlphp ERROR [8abc64dd04] 1 /OriginSystems/application/Updraft/web/external/System/SSO/simplesaml/modules/saml/www/sp/saml2-acs.php:63 (require)
Feb 02 13:08:31 simplesamlphp ERROR [8abc64dd04] 0 /OriginSystems/application/Updraft/web/external/System/SSO/simplesaml/www/module.php:134 (N/A)
Feb 02 13:08:31 simplesamlphp ERROR [8abc64dd04] Error report with id dfbb52b0 generated.
Feb 02 13:08:31 simplesamlphp DEBUG [8abc64dd04] Template: Reading [/OriginSystems/application/Updraft/web/external/System/SSO/simplesaml/dictionaries/errors]
Feb 02 13:08:31 simplesamlphp DEBUG [8abc64dd04] Template: Reading [/OriginSystems/application/Updraft/web/external/System/SSO/simplesaml/modules/core/dictionaries/no_state]

Me parece que el token de autenticación debería ser _498e7d4d75bb7716e5e8cf905e0da5ef1c40cf1b3f pero no es por alguna razón. Dado que SimpleSAML no puede encontrar ese Token, nunca elimina el antiguo y crea uno nuevo. Tal vez me equivoque en eso. Estoy perfectamente dispuesto a ser corregido. Mi problema es que no sé qué está causando esto. Configuré cookie.name en el archivo de configuración como “biz.stage.originsystems.co.za” y parece funcionar bien para el panel de control de SimpleSAML, pero no funciona cuando se usa el SP desde la aplicación real. ¿Puede alguien señalarme en la dirección correcta aquí? Estoy perdido.

  • El ID/token generado que está obteniendo de alguna manera está creando un problema, las tres razones principales que pueden generar estos errores son: 1. Cambiar el nombre de dominio, por ejemplo, está en example.com saltando a www.example.com que causa la sesión sin -error de estado, 2. Saltar de HTTP a HTTPS o de HTTPS a HTTP, 3. la sesión no se guarda correctamente. Para obtener más información, consulte aquí

    – Talha Habib

    6 de febrero de 2016 a las 18:21


  • Multi Thinker: Esa es una excelente respuesta. Debe publicarlo como respuesta, para que pueda ganar la recompensa. Si no funciona para usted, Andrew, ¿le importaría publicar los metadatos para su configuración de SP e IDP?

    -Ken Clubok

    10 de febrero de 2016 a las 3:51

  • Sin mirar los metadatos, es difícil dar una respuesta específica, pero me gustaría señalar que Firefox tiene un complemento llamado Saml Tracer (addons.mozilla.org/en-US/firefox/addon/saml-tracer) que utilicé todo el tiempo al depurar problemas de SSO. Podría ayudarlo a rastrear qué valores se envían de un lado a otro sin depender de las declaraciones de depuración.

    – tmountjr

    29 de agosto de 2017 a las 14:52

  • Hola, tengo el mismo problema. ¿Conseguiste solucionar esto?

    – JianYA

    13 de marzo de 2018 a las 2:33

  • ¿Está ejecutando código en varias máquinas de trabajo? (Por ejemplo, varias máquinas de trabajadores PHP detrás del equilibrador de proxy inverso). Si es así, asegúrese de que todos los trabajadores vean el backend de datos compartidos que SimpleSAML usa para mantener los datos entre diferentes solicitudes.

    –Mikko Rantalainen

    12 de agosto de 2021 a las 10:13

avatar de usuario
Martín Zeitler

tendrá que definir dos entornos completamente independientes, para evitar mezclar esos dos entornos (que cuentan con dos proveedores de identidad completamente diferentes), tal como lo describe (lo que obviamente no funciona, a menos que haya agregado ambos en el configuración de SSO, que probablemente no sea el resultado deseado); simplemente verifique el nombre de host del servidor y defina las variables en consecuencia; esto se puede hacer “sobre la marcha” o posiblemente mediante dos archivos de configuración diferentes (en realidad, es bastante común enviar archivos de configuración al final de una implementación). para mí, esto suena mucho más como un problema de implementación (falta del archivo de configuración adecuado para el sitio en vivo), que un problema de SSO.

¿Ha sido útil esta solución?