| Resumen | Discourse OpenID Connect permite utilizar un proveedor de OpenID Connect como proveedor de autenticación para Discourse. | |
| Guía de instalación | Este plugin está incluido en el núcleo de Discourse. No es necesario instalar el plugin por separado. |
Funcionalidades
El plugin busca proporcionar una implementación mínima de la especificación. Específicamente, admite el “Flujo de código de autorización”. Para empezar, sigue las instrucciones de instalación del plugin o contacta a tu proveedor de alojamiento.
Nuestro plugin oauth2-basic puede utilizarse para conectarse a algunos proveedores de OpenID Connect (OpenID Connect se basa en OAuth2). Sin embargo, este plugin debería requerir mucha menos configuración manual y puede hacer uso del “token de identificación” JWT si no está disponible una API JSON.
La configuración se realiza automáticamente utilizando un documento de descubrimiento de OpenID Connect. Según la especificación, este debería ubicarse en <dominio_emisor>/.well-known/openid-configuration, pero Discourse admite cualquier ruta para permitir implementaciones no conformes (por ejemplo, Azure B2C). El documento de descubrimiento se almacena en caché durante 10 minutos para mejorar el rendimiento en sitios con alto tráfico.
Si el documento de descubrimiento incluye un parámetro userinfo_endpoint, el plugin lo utilizará para recopilar metadatos del usuario. De lo contrario, el plugin extraerá los metadatos del id_token (un JWT) proporcionado por el punto final de token. El plugin NO verifica la autenticidad de la firma JWT, ya que esto aumentaría significativamente la complejidad. Esta decisión está respaldada por la especificación:
Si el token de identificación se recibe mediante comunicación directa entre el cliente y el punto final de token (que es el caso en este flujo), la validación del servidor TLS puede utilizarse para validar el emisor en lugar de verificar la firma del token.
Para los proveedores de identidad que admiten autorización sin secreto utilizando el “Flujo de código de autorización con clave de prueba para intercambio de código”, PKCE debe estar habilitado y la configuración client_secret puede omitirse.
Configuración
Opciones de configuración básica
-
openid_connect_enabled:Habilitar la autenticación OpenID Connect -
openid_connect_discovery_document: URL del documento de descubrimiento de OpenID Connect. Normalmente ubicado enhttps://tu.dominio/.well-known/openid-configuration -
openid_connect_client_id: ID de cliente de OpenID Connect -
openid_connect_client_secret: Secreto de cliente de OpenID Connect -
openid connect rp initiated logout: Redirigir al usuario alend_session_endpointdespués de cerrar sesión. Debe ser compatible con tu proveedor de identidad e incluirse en el documento de descubrimiento. -
openid connect rp initiated logout redirect: (opcional) Elpost_logout_redirect_urique se pasará al punto final de cierre de sesión. Si se proporciona, debe estar registrado con el proveedor de identidad. -
openid_connect_authorize_scope: Los ámbitos enviados al punto final de autorización. Esto debe incluir ‘openid’ -
openid_connect_use_pkce: Habilitar la Clave de Prueba para Intercambio de Código (PKCE) para la autenticación OpenID Connect. -
openid_connect_verbose_logging: Registrar información detallada de autenticación openid-connect en/logs. Mantén esto deshabilitado durante el uso normal.
Opciones de configuración avanzada
-
openid_connect_token_scope: Los ámbitos enviados al solicitar el punto final de token. La especificación oficial no lo requiere. -
openid_connect_error_redirects: Si elerror_reasonde la devolución de llamada contiene el primer parámetro, el usuario será redirigido a la URL en el segundo parámetro. Se utiliza para implementaciones inusuales que envían errores en respuesta a la entrada del usuario (por ejemplo, Azure B2C). -
openid_connect_allow_association_change: Permitir a los usuarios desconectar y reconectar sus cuentas de Discourse del proveedor de OpenID Connect.
-
openid_connect_groups_claim: El nombre de la reclamación en la respuesta OIDC[1] que contiene los grupos del usuario como un array de cadenas. Déjalo en blanco para deshabilitar la sincronización de grupos. Consulta Sincronización de grupos a continuación. -
openid_connect_user_field_mappings: Mapeos de reclamaciones OIDC[2] que se almacenarán en los campos de usuario de Discourse. Los campos de usuario se identifican por su ID numérico, que se puede encontrar en la URL al editarlos desde el panel de administración.
Sincronización de grupos
El plugin puede sincronizar automáticamente las membresías de grupos desde tu proveedor de OpenID Connect hacia los grupos de Discourse. En cada inicio de sesión, el plugin leerá la reclamación configurada del token OIDC y actualizará las membresías de grupo del usuario en consecuencia. Para habilitar la sincronización de grupos:
-
Configura tu proveedor de identidad para que devuelva un array de grupos en una de las reclamaciones. Debe ser un array de cadenas.
-
Establece
openid_connect_groups_claimcon el nombre de la reclamación en el token OIDC que contiene los grupos del usuario (por ejemplo,cognito:groups). Una vez establecido, comenzará a sincronizar la información con el sistema de “Grupos asociados” de Discourse. -
Busca el grupo de Discourse que deseas vincular. Ve a “Configuración” → “Membresía” → “Automático” y luego elige los Grupos asociados para vincular. Esta lista desplegable se llena con información del proveedor de identidad, por lo que al menos un miembro del grupo debe haber iniciado sesión para que aparezca una opción.
Configuración de ejemplo
Aquí configuraremos el plugin openid-connect para conectarse al proveedor de OpenID Connect de Google. Esto replica una funcionalidad que ya existe en el núcleo de Discourse, pero sirve como un ejemplo accesible.
-
Ve a OpenID Connect | Sign in with Google | Google for Developers y sigue las instrucciones para obtener credenciales de OAuth.
-
En la misma página, sigue las instrucciones para agregar una URI de redirección. Debe ser
https://<tu_foro>/auth/oidc/callback(sin barra final) -
Ve a la configuración de tu sitio de Discourse y busca “openid_connect”
-
openid connect enabled: [x] -
openid connect discovery document:https://accounts.google.com/.well-known/openid-configuration -
openid connect client id:<client-id> -
openid connect client secret:<client-secret> -
openid connect authorize scope:
openid email(con un espacio entre ellos)
-
-
¡Listo! El botón “Iniciar sesión con OpenID Connect” ahora iniciará sesión usando Google
. Estos mismos pasos pueden aplicarse a otros proveedores con cambios mínimos.
Depuración
Además de la configuración verbose_logging descrita anteriormente, puedes acceder a datos sobre las asociaciones OIDC usando el plugin data-explorer:
SELECT user_id, provider_name, provider_uid
FROM user_associated_accounts
WHERE provider_name = 'oidc'
O en la consola de rails:
User.find_by_username("david").user_associated_accounts.where(provider_name: 'oidc')
Notas específicas del proveedor
Siéntete libre de actualizar esto si encuentras cualquier peculiaridad específica del proveedor relacionada con esta integración:
Entra ID (anteriormente Azure AD)
Agrega el ámbito email y asegúrate de estar utilizando el documento de configuración del punto final de versión 2. Por ejemplo
https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration
Azure B2C
Los detalles de la URL del documento de descubrimiento se pueden encontrar aquí: Web sign in with OpenID Connect - Azure AD B2C | Microsoft Learn
Para que los correos electrónicos funcionen:
Yahoo
-
Ve a https://developer.yahoo.com/apps y crea una nueva aplicación
-
Ingresa el nombre de la aplicación y establece el dominio de devolución de llamada en el dominio de tu foro (por ejemplo,
meta.discourse.org) -
En Permisos de API, elige Perfiles: Lectura/Escritura pública y privada. Esta es la única forma que conozco para obtener la dirección de correo electrónico del usuario
-
Guarda la aplicación
-
En la configuración de OIDC de Discourse, establece el documento de descubrimiento en
https://login.yahoo.com/.well-known/openid-configuration -
Ingresa el ID de cliente y el secreto de Yahoo
-
Habilita el plugin OIDC
AWS Cognito
- Ve a Cognito y selecciona o crea un nuevo grupo de usuarios.
- Define una aplicación en Clientes de aplicaciones.
- Deja todo por defecto, pero cambia la configuración de flujos de autenticación para seleccionar solo ALLOW_REFRESH_TOKEN_AUTH.
- Ve a la configuración del cliente de aplicaciones y selecciona la nueva aplicación.
- Cambia la URL de devolución de llamada a https://tusitio.ejemplo.com/auth/oidc/callback.
- Marca solo el flujo de concesión de código de autorización entre “Flujos OAuth permitidos”.
- Marca todos los ámbitos necesarios (yo tengo todos marcados).
Okta
-
Configura Discourse con el ID y el secreto de cliente de tu aplicación Okta
-
Establece la URL del documento de descubrimiento en
https://{tu-app}.okta.com/.well-known/openid-configuration -
En Discourse, establece
openid connect authorize scopeenopenid email
¿Alojado por nosotros? Este plugin está disponible en nuestros planes Business y Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion


