WordPress Multisite con múltiples instancias de Discourse

Hola a todos,

Estoy buscando información sobre la viabilidad de añadir otra comunidad de Discourse a nuestra configuración actual. En este momento, tenemos una instalación de WordPress multisitio con una comunidad de Discourse que utiliza Discourse SSO para un sitio dedicado a dicha comunidad, pero con otro proveedor de SSO que gestiona el inicio de sesión en WordPress.

Quisiera añadir un nuevo sitio de WordPress para una nueva comunidad de Discourse, pero no tengo claro si es posible unir múltiples foros de Discourse dentro de esta configuración multisitio (si eso tiene sentido). Dado que SSO es una configuración de red de WordPress, parece que no es posible tener más de una instancia de Discourse.

Idealmente, tendríamos:

  • WordPress multisitio
  • 2 instancias de Discourse

(Los usuarios de ambas instancias de Discourse solo deberían tener acceso a la comunidad a la que pertenecen).

He leído algunos posts sobre tener una configuración multisitio de WordPress con una instancia única de Discourse (y viceversa), pero no he encontrado información sobre WordPress multisitio con múltiples instancias de Discourse.

Gracias

3 Me gusta

No es posible que los sitios de una configuración multisitio de WordPress funcionen como proveedor de SSO para dos instancias de Discourse. La razón es que en una red multisitio, todos los usuarios se almacenan en una única tabla de base de datos. Si se permite que múltiples sitios de Discourse funcionen como proveedores de SSO para varios sitios en una red, no hay una manera sencilla de garantizar que los identificadores de usuario de Discourse guardados en WordPress sean únicos.

3 Me gusta

Gracias, eso es lo que yo pensaba. ¿Sería posible permitir que una instancia de Discourse actúe como proveedor de SSO para la otra instancia, manteniendo al mismo tiempo el acceso adecuado de los usuarios a sus respectivas comunidades?

1 me gusta

Una instancia de Discourse puede funcionar como proveedor de SSO para otra instancia de Discourse. Asumo que la configuración que estás considerando es tener WordPress como proveedor de SSO para la instancia 1 de Discourse, y que la instancia 1 de Discourse sería el proveedor de SSO para la instancia 2 de Discourse. Creo que esto es posible, pero nunca he configurado un sitio de Discourse para que sea simultáneamente un cliente de SSO y un proveedor de SSO.

Con la configuración que describí anteriormente, todos los usuarios de la instancia 1 de Discourse tendrían acceso a la instancia 2 de Discourse. No creo que eso sea lo que buscas.

Otro enfoque posible para este problema sería utilizar una sola instancia de Discourse y emplear permisos de grupos por categoría para limitar qué partes del foro pueden acceder los usuarios. Puedes pasar grupos de Discourse en la carga útil del SSO. Debería ser posible en tu sitio de WordPress determinar a qué sitios tiene acceso un usuario. Podrías crear un grupo de Discourse para cada sitio de WordPress y luego usar el filtro wpdc_sso_params para agregar un parámetro add_groups a la carga útil del SSO.

3 Me gusta

Actualmente, Discourse SSO es el proveedor de SSO; supongo que la nueva consideración sería tener la Instancia 1 como proveedor de SSO (para ambas, Instancia 1 y 2).

Básicamente, mantener la misma configuración de SSO que tenemos ahora, pero agregar otra instancia de Discourse y seguir teniendo alguna forma de limitar el acceso entre la Instancia 1 y la Instancia 2.

1 me gusta

Hola @simon: actualmente lo estoy implementando y no estoy seguro de por qué no veo las opciones de cliente SSO en el complemento WP Discourse. Ver la captura de pantalla a continuación

Mi conexión indica que está activa (el último uso de la clave API también lo muestra). Al agregar el shortcode [discourse_sso_client], parece haber un problema de configuración (el encabezado de respuesta de ubicación contiene la URL generada por el shortcode [discourse_sso_client] en lugar de la carga útil de SSO.

Esto es así por diseño. La opción de cliente SSO solo está disponible en redes multisitio cuando se configura a nivel de todo el sitio. Necesito configurar una red multisitio en mi entorno de desarrollo local para verificar nuevamente la configuración. Te responderé sobre esto más tarde hoy.

3 Me gusta

Gracias: actualmente tengo el plugin instalado a nivel de red con SSO Client seleccionado

edición: He depurado el problema hasta query-redirect.php aquí:

if ( empty( $this->options['sso-client-enabled'] ) || 1 !== intval( $this->options['sso-client-enabled'] ) ) {
   return;
}

Parece que esta opción no se está configurando correctamente para mí; no estoy seguro si es por la configuración a nivel de red o por otra cosa.

La documentación para configurar el plugin en una red multisitio no está actualizada. Esta es una buena oportunidad para organizarlo y actualizar la guía Instalación y configuración del plugin WP Discourse.

Para utilizar la funcionalidad de cliente SSO en una red multisitio, el plugin debe configurarse a nivel de red. Esto se hace haciendo clic en el enlace de Discourse en tu Panel de Red:

En la página de red de Discourse, selecciona la opción Habilitar configuración multisitio. Luego, ingresa tu URL de Discourse, tu clave API y tu nombre de usuario para publicación en la sección Configuración de conexión. Desplázate hasta el final de la página y haz clic en el botón Guardar opciones. Deberías ver un mensaje que dice “¡Estás conectado a Discourse!” en la parte superior de la página.

Para usar Discourse como proveedor de SSO para los sitios de tu red multisitio, desplázate hasta el final de la página de red de Discourse y selecciona la opción Habilitar cliente SSO. También agrega una clave a la configuración Clave secreta SSO. Guarda tus opciones nuevamente.

Ahora ve a tu sitio de Discourse y copia la clave secreta en la configuración del sitio secretos del proveedor sso de Discourse. Ingresa el símbolo * como el dominio del proveedor de SSO. Cuando se haya guardado esa configuración, debería verse similar a esto:

Ahora selecciona la opción habilitar proveedor sso en Discourse.

Con estas configuraciones en su lugar, ir a la pestaña SSO / Cliente SSO de WP Discourse para cualquier sitio de tu red debería llevarte a una página que se ve similar a esta:

Para una prueba rápida, selecciona las opciones Agregar enlace de inicio de sesión y Sincronizar usuarios existentes por correo electrónico. Luego, cierra la sesión de tu sitio de WordPress. Deberías poder volver a iniciar sesión haciendo clic en el enlace “Iniciar sesión con Discourse” que se mostrará en tu página wp-login.php.

Si no estás utilizando la página de inicio de sesión predeterminada de WordPress, intenta copiar el shortcode [discourse_sso_client] en una publicación de tu sitio. Ese shortcode solo muestra marcado en la página para usuarios que no han iniciado sesión. También puedes crear un enlace de inicio de sesión construyendo un enlace en este formato:

<a href="https://example.com/?discourse_sso=1&redirect_to=https://example.comt/">Iniciar sesión con Discourse</a>

Esto iniciará sesión al usuario en tu sitio con Discourse y luego lo redirigirá de nuevo a la página de WordPress que hayas configurado como valor del parámetro redirect_to.

Según tu depuración, parece que la opción Habilitar cliente SSO no estaba activada en tu página de red de Discourse. ¿Puedes asegurarte de que esa opción esté habilitada y avisarme si aún tienes problemas con ello?

El código que encontraste que impedía que el cliente SSO funcionara para ti es correcto, pero es una condición mal escrita:

if ( empty( $this->options['sso-client-enabled'] ) || 1 !== intval( $this->options['sso-client-enabled'] ) )

Debería simplificarse a if ( empty( $this->options['sso-client-enabled'] ) ). Ese es el patrón que se utiliza en todas partes del plugin.

3 Me gusta