OAuth2 de base pour Discourse

:discourse2: Résumé Discourse OAuth2 Basic prend en charge les fournisseurs OAuth2 de base, en supposant qu’ils disposent d’un point de terminaison API JSON permettant de récupérer les détails de l’utilisateur via un jeton.
:open_book: Guide d’installation Ce plugin est intégré au cœur de Discourse. Aucune installation séparée du plugin n’est nécessaire.

Fonctionnalités

Ce plugin vous permet d’utiliser un fournisseur OAuth2 de base comme méthode d’authentification pour Discourse. Il devrait fonctionner avec de nombreux fournisseurs, à condition qu’ils fournissent un point de terminaison JSON pour récupérer les informations sur l’utilisateur qui se connecte.

Cela est principalement utile pour les personnes utilisant des fournisseurs de connexion peu populaires. Si vous souhaitez utiliser Google, Facebook ou Twitter, ces options sont déjà incluses par défaut et vous n’avez pas besoin de ce plugin. Vous pouvez également rechercher d’autres fournisseurs de connexion dans notre dépôt Github.

Configuration

Configuration de base

  1. Tout d’abord, enregistrez votre application Discourse auprès de votre fournisseur OAuth2. Il vous sera demandé une URI de redirection qui sera :

    http://DISCOURSE_HOST/auth/oauth2_basic/callback

:information_source: Remplacez DISCOURSE_HOST par la valeur appropriée et assurez-vous d’utiliser https si cela est activé. Le fournisseur OAuth2 devrait vous fournir un client ID et un secret, ainsi que plusieurs URLs.

  1. Rendez-vous dans AdminParamètresConnexion OAuth2 et remplissez la configuration de base pour le fournisseur OAuth2 :
  • oauth2_enabled - cochez cette case pour activer la fonctionnalité
  • oauth2_client_id - l’ID client fourni par votre fournisseur
  • oauth2_client_secret - le secret client fourni par votre fournisseur
  • oauth2_authorize_url - l’URL d’autorisation de votre fournisseur
  • oauth2_token_url - l’URL du jeton de votre fournisseur.

:information_source: Si vous ne parvenez pas à déterminer les valeurs des paramètres ci-dessus, consultez la documentation pour les développeurs de votre fournisseur ou contactez son support client.

Configuration du point de terminaison JSON utilisateur

Discourse est désormais capable de recevoir un jeton d’autorisation de votre fournisseur OAuth2. Malheureusement, Discourse a besoin de plus d’informations pour compléter l’authentification.

Nous avons besoin d’un point de terminaison API permettant de récupérer les informations sur l’utilisateur à partir du jeton.

Par exemple, le fournisseur OAuth2 SoundCloud propose une telle URL. Si vous disposez d’un jeton OAuth2 pour SoundCloud, vous pouvez effectuer une requête GET vers https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN et obtiendrez un objet JSON contenant les informations sur l’utilisateur.

Pour configurer cela dans Discourse, nous devons définir la valeur du paramètre oauth2_user_json_url. Dans ce cas, nous saisissons la valeur suivante :

https://api.soundcloud.com/me?oauth_token=:token

La partie :token indique à Discourse qu’il doit remplacer cette valeur par le jeton d’autorisation reçu lors de la fin de l’authentification.

Il ne reste plus qu’une dernière étape à effectuer. Nous devons indiquer à Discourse quels attributs sont disponibles dans le JSON reçu. Voici un exemple de réponse 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"
}

Les variables oauth2_json_user_id_path, oauth2_json_username_path, oauth2_json_name_path et oauth2_json_email_path doivent être configurées pour pointer vers les attributs appropriés dans le JSON.

Le seul attribut obligatoire est id - nous en avons besoin pour pouvoir retrouver le bon compte lorsque l’utilisateur se connectera à l’avenir. Les autres sont utiles s’ils sont disponibles : ils rendront le processus d’inscription plus rapide pour l’utilisateur, car ils seront préremplis dans le formulaire.

Voici comment j’ai configuré les paramètres de chemin JSON :

  oauth2_json_user_id_path: 'id'
  oauth2_json_username_path: 'permalink'
  oauth2_json_name_path: 'full_name'

J’ai utilisé permalink car il semble plus proche de ce que Discourse attend pour un nom d’utilisateur que le champ username dans leur JSON. Notez que j’ai omis le chemin de l’email : SoundCloud ne fournit pas d’email, donc l’utilisateur devra le fournir et le vérifier lors de sa première inscription sur Discourse.

Si les propriétés que vous souhaitez extraire de votre objet JSON sont imbriquées, vous pouvez utiliser des points. Par exemple, si l’API renvoyait une structure différente comme celle-ci :

{
  "user": {
    "id": 1234,
    "email": {
      "address": "test@example.com"
    }
  }
}

Vous pourriez utiliser user.id pour oauth2_json_user_id_path et user.email.address pour oauth2_json_email_path.

Si la clé elle-même contient des points, vous devrez placer des guillemets doubles autour d’elle ou échapper les points avec un反斜杠. Par exemple, étant donné ce JSON :

{
  "example.com/uid": "myuid"
}

Vous spécifieriez le chemin sous la forme example\.com/uid ou "example.com/uid".

Synchronisation des groupes et des champs utilisateur

  • oauth2_json_groups_path : chemin JSON contenant les groupes de l’utilisateur sous forme de tableau de chaînes. Après la première connexion d’un membre, ces groupes seront disponibles pour sélection dans la section « groupes associés » des paramètres de groupe de Discourse. Laissez vide pour désactiver la synchronisation des groupes.

  • oauth2_user_field_mappings : mappages de chemins JSON qui seront stockés dans les champs utilisateur de Discourse. Les champs utilisateur sont identifiés par leur ID numérique, que vous pouvez trouver dans l’URL lors de leur édition via le panneau d’administration.

:warning: Si vous définissez oauth2_json_email_path, le fournisseur OAuth2 doit confirmer que l’utilisateur est bien le propriétaire de cette adresse e-mail. Le non-respect de cette règle peut entraîner une prise de contrôle de compte dans Discourse !

:discourse2: Hébergé par nous ? Ce plugin est disponible dans nos offres Business et Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion

:spiral_notepad: Besoin d’automatiser les inscriptions utilisateurs ? Consultez Auto-provisioning user accounts when SSO is enabled

28 « J'aime »
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
Auto-provisioning user accounts when SSO is enabled
Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin
SSO with TownNews CMS
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)
Error during SSO integration - Wholistic Minds
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 and Auth0
Migrate a Jive Clearspace forum to Discourse