OAuth2 básico en Discourse

| |
|-|-|
:discourse2: | Resumen | Discourse OAuth2 Basic admite proveedores OAuth2 básicos, asumiendo que tienen un punto final de API JSON donde se pueden recuperar los detalles del usuario mediante un token.
:open_book: | Guía de instalación | Este plugin viene incluido con el núcleo de Discourse. No es necesario instalar el plugin por separado.

Características

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 está iniciando 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 están 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

  1. Primero, registra tu aplicación de Discourse con tu proveedor OAuth2. Se requerirá un URI de redirección que será:

    http://DISCOURSE_HOST/auth/oauth2_basic/callback

:information_source: Reemplaza DISCOURSE_HOST con el valor correspondiente y asegúrate de usar https si está habilitado. El proveedor OAuth2 debe proporcionarte un client ID y un secret, así como algunas URL.

  1. Visita AdminConfiguraciónInicio 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ón
  • oauth2_client_id - el ID de cliente de tu proveedor
  • oauth2_client_secret - el secreto de cliente de tu proveedor
  • oauth2_authorize_url - la URL de autorización de tu proveedor
  • oauth2_token_url - la URL de token de tu proveedor.

:information_source: Si no puedes determinar los valores de las configuraciones anteriores, consulta la documentación para desarrolladores de tu proveedor o contacta a su servicio de atención al cliente.

Configuración del punto final de usuario JSON

Ahora Discourse 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 basado en el token.

Por ejemplo, el proveedor OAuth2 SoundCloud proporciona una URL como esta. Si tienes un token OAuth2 para SoundCloud, puedes hacer 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, necesitamos establecer el valor de la configuración oauth2_user_json_url. En este caso, ingresaremos 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ó cuando se completó la autenticación.

Solo queda un último paso para completar. Necesitamos decirle a Discourse qué atributos están disponibles en el JSON que recibió. Aquí hay 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": "Alemania",
  "full_name": "Johannes Wagener",
  "city": "Berlín"
}

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 apropiados 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 útiles si están disponibles; acelerarán el proceso de registro para el usuario, ya que se rellenarán automáticamente en el formulario.

Así es como configuré las rutas de configuración 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 nombre de usuario 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 cuando se registre por primera vez 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, necesitará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".

:warning: Si estableces 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!

:discourse2: ¿Alojado por nosotros? Este plugin está disponible en nuestros planes Business y Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion

:spiral_notepad: ¿Necesitas automatizar los registros de usuarios? Consulta Auto-provisioning user accounts when SSO is enabled

28 Me gusta
Keycloak with Discourse
Discourse SSO with OAuth2
Login from another user database
Shopify Integration
How can we enable Auth0 SSO in Discourse
OAuth2 integration with Drupal
OAuth connection of discourse
Login flow (Flask -> Discourse -> Flask) with OAuth
How to use Oauth2 service provided by discourse?
How to login to discourse from external website
Is "partial" SSO possible?
Set up Salesforce auth using OAuth2 basic support plugin
How to force users link phone number when they using Discourse?
OAuth2 Custom Redirects Plugin
Custom Login / Registration from another API
Login on discourse using mastodon credentials
Open source will support customized provider SSO
Oauth2 with fusionauth cert issues
Migrate a Jive Clearspace forum to Discourse
Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin
Error during SSO integration - Wholistic Minds
What is supposed to go in “DISCOURSE_HOST”?
Custom Provider log-in with OAuth only sign-up/log-in
Discord, Google and Microsoft login, is oAuth2 enough?
Populating email field on login page
CodeBerg support
Gate our community to just members of our Shopify site?
Intergrate Discourse with keycloak
Integration into custom auth system where emails are not unique?
Twitter login doesn't work on meta
Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)
Question about Docker Manager?
Discourse OpenID Connect (OIDC)
🧩 How to Build an Android App User Community with Discourse? [HeyApks Project]
Bundling more popular plugins with Discourse core
Drupal 8 and Discourse shared SSO
Discourse for self hosting
Discourse + Intercom (Current User Id)
Auto-provisioning user accounts when SSO is enabled
ADFS Authentication
Pulling user auth0 sub from OAuth2.0 plugin
Suggestion for improving Integrated Authentication development
Github and Twitter Login/Sign-Up Functionality?
Automatically creating a user when logging in with Webflow/Memberspace
Switching out authentication for a passwordless alternative
Removing Yahoo login from Core, and deprecating OpenID 2.0
Shopify Integration
SSO with TownNews CMS
SSO and Auth0