Estamos ejecutando un conjunto de servicios para una comunidad cerrada específica y estamos considerando incluir Discourse como plataforma social. Me pregunto cuál es la mejor y más elegante forma (técnicamente) de integrar de manera fluida una instancia de Discourse en nuestro conjunto.
Para darles un ejemplo, nuestro conjunto incluye el servicio A y el servicio B (que hemos desarrollado internamente), así como un servicio de SSO OAuth2.
Si un usuario hace clic en iniciar sesión en el servicio A o en el servicio B, se redirige al servicio de SSO donde inicia sesión y luego es redirigido de vuelta como de costumbre. Sin embargo, gracias a las cookies y al control de sesiones, iniciar sesión en el servicio A no requerirá que el usuario inicie sesión nuevamente en el servicio B si decide visitarlo después (ya tendrá una sesión activa).
De manera similar, queremos una forma de permitir que los usuarios naveguen sin interrupciones hacia el servicio Discourse desde el servicio A o el servicio B después de iniciar sesión con el servicio de SSO. Supongamos que la entrada del usuario existe en todos los servicios. Actualmente, el plugin de OAuth2 para Discourse ha sido evaluado y funciona con nuestro servicio de SSO, pero requiere que los usuarios hagan clic en “Iniciar sesión con SSO” nuevamente cuando visitan Discourse. ¿Existe una forma, por ejemplo, mediante una llamada a la API, de iniciar automáticamente una sesión en Discourse también cuando los usuarios inician sesión a través del SSO común desde el Servicio A o el Servicio B?
Además, la pregunta anterior también se extiende a la integración de comentarios a través del componente incrustado. Mantener un servicio Discourse “público” no presenta problemas con la sección de comentarios, y los comentarios se incrustan correctamente. Sin embargo, si se ejecuta un servicio Discourse privado, la ventana de comentarios incrustada no mostrará los comentarios correctamente si los usuarios no han iniciado sesión en Discourse previamente, lo cual es un problema cuando se habla de integración fluida.
¿Existe alguna forma de sortear estos problemas? Estaba pensando en crear un plugin de intermediario (middleware) que decodifique un token o una cookie y autentique e inicie sesión automáticamente al usuario correspondiente antes de realizar la llamada real. ¿Existe algún plugin existente para esto?
Gracias por la respuesta rápida. Sin embargo, esto no resuelve el problema. Tanto en la ventana de comentarios de Discourse incrustada como al acceder al sitio de Discourse, el usuario (que ya ha iniciado sesión en, por ejemplo, “servicio A” mediante SSO) tendrá que volver a iniciar sesión.
En ambos casos, me encuentro con un mensaje de bienvenida: “Bienvenido. Se requiere una cuenta. Por favor, pídele una invitación a un miembro existente o inicia sesión para continuar” y el botón de inicio de sesión. Al hacer clic en él, aparece el cuadro de inicio de sesión y se me solicita que inicie sesión mediante nombre de usuario/contraseña o mediante el SSO OAuth. No es necesario que vuelva a ingresar el nombre de usuario y la contraseña de mi SSO porque la sesión de SSO sigue activa; sin embargo, no quiero que los usuarios tengan que experimentar esto. Cuando el usuario inicia sesión en “servicio A”, debe iniciarse sesión automáticamente en Discourse sin tener que volver a pulsar ningún botón de “Iniciar sesión”.
¿Qué necesitamos para lograrlo?
Estoy utilizando la versión 2.5.2 de Discourse, por si eso es relevante.
En la última versión de Discourse, siempre que estén habilitadas tanto la opción requerir inicio de sesión como autenticación inmediata, el usuario iniciará sesión automáticamente en Discourse siempre que ya tenga una cookie válida en el Proveedor de Identidad.
En versiones anteriores a la última, este flujo de inicio de sesión “mágico” estaba limitado a sitios que utilizan nuestro propio protocolo SSO, descrito en Inicio de sesión único oficial para Discourse (sso).
Hmm, estoy usando imágenes de Bitnami y su última versión sigue siendo la 2.5.2, así que probablemente tendré que esperar un poco (o buscar una forma de hacer una actualización manual, o usar alguna otra imagen).
De todos modos, gracias por indicarme la dirección correcta. ¡Muy agradecido!
Tenga en cuenta que las imágenes de Bitnami no son compatibles con los desarrolladores de Discourse y, a lo largo de los años, han presentado muchas incompatibilidades con el uso normal del software. Recomiendo encarecidamente utilizar una instalación estándar oficial de Discourse.