| Resumen | Discourse OAuth2 Basic admite proveedores OAuth2 básicos, asumiendo que disponen de un punto final de API JSON donde se pueden recuperar los detalles del usuario mediante un token. | |
| Guía de instalación | Este plugin viene incluido en el núcleo de Discourse. No es necesario instalarlo por separado. |
Funcionalidades
Este plugin te permite utilizar un proveedor OAuth2 básico como método de autenticación para Discourse. Debería funcionar con muchos proveedores, con la salvedad de que deben proporcionar un punto final JSON para recuperar información sobre el usuario que inicia sesión.
Esto es principalmente útil para personas que utilizan proveedores de inicio de sesión que no son muy populares. Si deseas usar Google, Facebook o Twitter, estos ya vienen incluidos y no necesitas este plugin. También puedes buscar otros proveedores de inicio de sesión en nuestro repositorio de GitHub.
Configuración
Configuración básica
- Primero, registra tu aplicación de Discourse con tu proveedor OAuth2. Se requerirá una URI de redirección que será:
http://DISCOURSE_HOST/auth/oauth2_basic/callback
Sustituye
DISCOURSE_HOSTpor el valor correspondiente y asegúrate de usarhttpssi está habilitado. El proveedor OAuth2 debe proporcionarte unclient IDy unsecret, así como varias URLs.
- Visita Administración → Configuración → Inicio de sesión OAuth2 y completa la configuración básica para el proveedor OAuth2:
oauth2_enabled- marca esta opción para habilitar la funciónoauth2_client_id- el ID de cliente de tu proveedoroauth2_client_secret- el secreto de cliente de tu proveedoroauth2_authorize_url- la URL de autorización de tu proveedoroauth2_token_url- la URL de token de tu proveedor.
Si no logras determinar los valores de la configuración anterior, consulta la documentación para desarrolladores de tu proveedor o contacta con su atención al cliente.
Configuración del punto final JSON del usuario
Discourse ahora puede recibir un token de autorización de tu proveedor OAuth2. Desafortunadamente, Discourse requiere más información para completar la autenticación.
Necesitamos un punto final de API al que se pueda contactar para recuperar información sobre el usuario basándose en el token.
Por ejemplo, el proveedor OAuth2 SoundCloud proporciona una URL así. Si tienes un token OAuth2 para SoundCloud, puedes realizar una solicitud GET a https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN y recibirás un objeto JSON que contiene información sobre el usuario.
Para configurar esto en Discourse, debemos establecer el valor de la configuración oauth2_user_json_url. En este caso, introduciremos el valor:
https://api.soundcloud.com/me?oauth_token=:token
La parte con :token le indica a Discourse que debe reemplazar ese valor con el token de autorización que recibió al completarse la autenticación.
Solo queda un último paso. Debemos decirle a Discourse qué atributos están disponibles en el JSON recibido. Aquí tienes una respuesta de ejemplo de SoundCloud:
{
"id": 3207,
"permalink": "jwagener",
"username": "Johannes Wagener",
"uri": "https://api.soundcloud.com/users/3207",
"permalink_url": "http://soundcloud.com/jwagener",
"avatar_url": "http://i1.sndcdn.com/avatars-000001552142-pbw8yd-large.jpg?142a848",
"country": "Germany",
"full_name": "Johannes Wagener",
"city": "Berlin"
}
Las variables oauth2_json_user_id_path, oauth2_json_username_path, oauth2_json_name_path y oauth2_json_email_path deben configurarse para apuntar a los atributos adecuados en el JSON.
El único atributo obligatorio es id: lo necesitamos para que, cuando el usuario inicie sesión en el futuro, podamos recuperar la cuenta correcta. Los demás son muy útiles si están disponibles, ya que acelerarán el proceso de registro del usuario al prellenarse en el formulario.
Así es como configuré los ajustes de ruta JSON:
oauth2_json_user_id_path: 'id'
oauth2_json_username_path: 'permalink'
oauth2_json_name_path: 'full_name'
Usé permalink porque parece más similar a lo que Discourse espera para un nombre de usuario que el campo username en su JSON. Observa que omití la ruta del correo electrónico: SoundCloud no proporciona un correo electrónico, por lo que el usuario deberá proporcionarlo y verificarlo la primera vez que se registre en Discourse.
Si las propiedades que deseas de tu objeto JSON están anidadas, puedes usar puntos. Por ejemplo, si la API devolviera una estructura diferente como esta:
{
"user": {
"id": 1234,
"email": {
"address": "test@example.com"
}
}
}
Podrías usar user.id para oauth2_json_user_id_path y user.email.address para oauth2_json_email_path.
Si la clave en sí incluye puntos, deberás poner comillas dobles alrededor de ella o escapar los puntos con una barra invertida. Por ejemplo, dado este JSON:
{
"example.com/uid": "myuid"
}
Especificarías la ruta como example\.com/uid o "example.com/uid".
Sincronización de grupos y campos de usuario
-
oauth2_json_groups_path: Ruta JSON que contiene los grupos del usuario como un array de cadenas. Después de que el primer miembro haya iniciado sesión, estos grupos estarán disponibles para selección en la sección «Grupos asociados» de la configuración de grupos de Discourse. Déjalo en blanco para desactivar la sincronización de grupos. -
oauth2_user_field_mappings: Mapeos de rutas JSON que se almacenarán en los campos de usuario de Discourse. Los campos de usuario se identifican por su ID numérico, que puede encontrarse en la URL al editarlos desde el panel de administración.
Si configuras
oauth2_json_email_path, el proveedor OAuth2 debe confirmar que el usuario es propietario de esa dirección de correo electrónico. ¡No hacerlo puede resultar en la toma de control de cuentas en Discourse!
¿Alojado por nosotros? Este plugin está disponible en nuestros planes Business y Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
¿Necesitas automatizar los registros de usuarios? Consulta Auto-provisioning user accounts when SSO is enabled