| 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. | |
| 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
- 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
Remplacez
DISCOURSE_HOSTpar la valeur appropriée et assurez-vous d’utiliserhttpssi cela est activé. Le fournisseur OAuth2 devrait vous fournir unclient IDet unsecret, ainsi que plusieurs URLs.
- Rendez-vous dans Admin → Paramètres → Connexion 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 fournisseuroauth2_client_secret- le secret client fourni par votre fournisseuroauth2_authorize_url- l’URL d’autorisation de votre fournisseuroauth2_token_url- l’URL du jeton de votre fournisseur.
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.
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 !
Hébergé par nous ? Ce plugin est disponible dans nos offres Business et Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
Besoin d’automatiser les inscriptions utilisateurs ? Consultez Auto-provisioning user accounts when SSO is enabled