| 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, 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
- 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 activé. Le fournisseur OAuth2 devrait vous fournir unclient IDet unsecret, ainsi que plusieurs URL.
- Accédez à 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 de 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 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"
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 !
Hébergé par nous ? Ce plugin est disponible dans nos offres Business et Entreprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
Besoin d’automatiser les inscriptions d’utilisateurs ? Consultez Auto-provisioning user accounts when SSO is enabled