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, ceux-ci sont inclus par défaut et vous n’avez pas besoin de ce plugin. Vous pouvez également consulter 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 activé. Le fournisseur OAuth2 devrait vous fournir un client ID et un secret, ainsi que plusieurs URL.

  1. Accédez à 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 de 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 de l’utilisateur

Discourse peut désormais recevoir un jeton d’autorisation de votre fournisseur OAuth2. Malheureusement, Discourse nécessite plus d’informations pour pouvoir finaliser l’authentification.

Nous avons besoin d’un point de terminaison API auquel il est possible de se connecter pour récupérer des informations sur l’utilisateur à partir du jeton.

Par exemple, le fournisseur OAuth2 SoundCloud fournit 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 recevrez un objet JSON contenant des 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 entrerons la valeur suivante :

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

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

Il reste 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 afin de pouvoir récupérer le bon compte lorsque l’utilisateur se connecte à l’avenir. Les autres sont excellents 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 similaire à ce que Discourse attend pour un nom d’utilisateur que le nom d’utilisateur dans leur JSON. Notez que j’ai omis le chemin de l’e-mail : SoundCloud ne fournit pas d’e-mail, l’utilisateur devra donc le fournir et le vérifier lors de sa première inscription sur Discourse.

Si les propriétés que vous souhaitez 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 mettre des guillemets doubles autour d’elle ou échapper les points avec une barre oblique inverse. 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"

:warning: Si vous définissez oauth2_json_email_path, le fournisseur OAuth2 doit confirmer que l’utilisateur possède bien 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 Entreprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion

:spiral_notepad: Besoin d’automatiser les inscriptions d’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