Les clés API nous permettent d’intégrer Discourse à d’autres systèmes ou d’automatiser diverses actions. Cependant, un grand pouvoir implique de grandes responsabilités. Si un acteur malveillant obtient l’accès à une clé API, il pourrait accéder à des données sensibles ou modifier votre site. Pour atténuer ce risque et ajouter une couche de sécurité supplémentaire, vous pouvez désormais limiter les actions autorisées pour une clé API en utilisant des périmètres d’accès (scopes).
Périmètres d’accès et paramètres autorisés
Lors de la création d’une nouvelle clé API, vous pouvez sélectionner les périmètres d’accès souhaités. Si vous passez la souris sur l’icône , vous verrez une brève description de son fonctionnement. Le bouton affichera les URL associées à ce périmètre d’accès.
Vous pouvez également spécifier les paramètres acceptés. Séparez plusieurs valeurs par des virgules.
Migration des clés existantes
Lors de l’ajout de cette fonctionnalité, les clés existantes sont devenues des clés « globales ». Pour les migrer vers des périmètres d’accès, vous devez les révoquer et en créer de nouvelles.
Ajout de périmètres d’accès personnalisés
Les plugins peuvent ajouter des périmètres d’accès personnalisés en appelant la méthode add_api_key_scope :
resource est un symbole utilisé pour regrouper des périmètres d’accès apparentés, tandis que action est un hachage contenant les attributs suivants :
actions : Une liste contenant les actions de contrôleur autorisées. Le format est nom_du_contrôleur#nom_de_la_méthode.
methods : Une liste de méthodes HTTP à autoriser (par exemple, %i[get]). Utilisez cette option au lieu de actions pour filtrer par méthode HTTP plutôt que par action de contrôleur.
params : Une liste contenant les noms des paramètres autorisés.
aliases : Un hachage contenant un nom différent pour un paramètre autorisé.
Pour savoir comment les périmètres d’accès de base sont définis, consultez :
J’ai pourtant configuré les permissions read et read_list sur les topics pour cette clé API. Par exemple, /top.json fonctionne avec la même clé. Le point de terminaison fonctionne lorsque j’utilise une « clé globale ».
Je souhaite intégrer la clé API dans mon client pour lire la liste des catégories et des topics, il est donc important d’avoir une clé en lecture seule !
Malheureusement, nous n’incluons qu’une poignée de scopes par défaut en raison du grand nombre de points de terminaison disponibles. Nous pourrions en ajouter de nouveaux à l’avenir, mais d’ici là, vous devrez les étendre pour répondre à vos besoins.
Si vous utilisez une clé API avec des scopes restreints, l’appel de points de terminaison non inclus dans les scopes choisis ne fonctionnera pas. Vous pouvez cliquer sur le bouton pour voir quelles URL sont acceptées.
Cela ne fonctionne que pour les sites publics. De plus, vous ne verrez pas d’éléments tels que les catégories privées, sauf si vous êtes connecté et disposez des permissions suffisantes.
Proposez-vous des suggestions pour d’autres scopes ?
Une chose qui m’intéresserait, c’est d’utiliser l’API de notre site pour permettre à un autre site de vérifier si un utilisateur existe avec une adresse e-mail donnée et de l’ajouter à un groupe si c’est le cas. Je fais confiance au site en question (un autre site au sein de notre organisation mère), mais il me semble judicieux de restreindre les options d’accès à ce qui est strictement nécessaire, si cela est possible.
Je suis super content qu’ils aient ouvert une API pour les plugins. Vous pouvez commencer par un plugin et voir s’il peut être intégré au cœur du système.