Problema de SSO: Faltan los parámetros SSO o SIG

Parece probable que algo no esté configurado correctamente. Quizás intentes dar un paso atrás. No tengo un sitio proveedor de SSO configurado en mi configuración local en este momento, pero esto podría ayudarte un poco.

En Discourse, asegúrate de que se configuren los siguientes ajustes:

La configuración discourse connect url debe establecerse en la URL que está manejando el código que has publicado.

Establece la configuración discourse connect secret en una cadena de texto de al menos 10 caracteres de longitud. Ten en cuenta que tienes la cadena de 7 caracteres keyhere codificada de forma rígida en el código que has publicado. Supongo que cambias ese valor cuando ejecutas el código. Establécelo con el mismo valor que has introducido en Discourse.

Ahora cierra sesión en tu sitio de Discourse. Abre la pestaña de red del inspector web de tu navegador. Haz clic en el botón “Login” en Discourse. Deberías ver solicitudes similares a las dos primeras solicitudes de la siguiente captura de pantalla:

La primera solicitud será a http://forum.example.com/session/sso?return_path=%2F

La siguiente solicitud debería ser a https://example.com/?sso=<sso_payload_sent_from_discourse>&sig=<sso_signature>

example.com y forum.example.com deben establecerse en los dominios reales que estés utilizando.

Si todo está configurado correctamente, esperaría que esto asigne los valores de los parámetros sso y sig a las variables que has establecido aquí:

$sso = $_GET['sso'];
$sig = $_GET['sig'];

Si fuera yo, probablemente comentaría el resto del código y simplemente confirmaría que puedes recibir el payload y asignarlo a las variables.

Con DiscourseConnect habilitado, puedes volver a iniciar sesión en tu sitio de Discourse visitando la ruta /u/admin-login. Si tienes acceso a la consola Rails del sitio de Discourse, también puedes volver a iniciar sesión deshabilitando DiscourseConnect desde la consola Rails:

SiteSetting.enable_discourse_connect = false

Es posible que haya errores más abajo en el código que has publicado. Por ejemplo, creo que necesitas llamar a urldecode en el valor del parámetro sso antes de generar la firma esperada. Echa un vistazo a cómo lo maneja el plugin WP Discourse:

$payload en la función anterior es solo el valor del parámetro de consulta sso, después de haber sido sanitizado aquí: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub.

1 me gusta