Français
  • rbac
  • conception de rôles
  • implémentation de RBAC

RBAC en pratique : Implémentation d'une autorisation sécurisée pour votre application

Guide complet du contrôle d'accès basé sur les rôles (RBAC) : Maîtriser la conception des permissions, la gestion des rôles et l'autorisation sécurisée avec une implémentation CMS pratique.

Yijun
Yijun
Developer

Arrêtez de perdre des semaines sur l'authentification des utilisateurs
Lancez des applications sécurisées plus rapidement avec Logto. Intégrez l'authentification des utilisateurs en quelques minutes et concentrez-vous sur votre produit principal.
Commencer
Product screenshot

Avez-vous du mal à mettre en œuvre un système d'autorisation sécurisé et évolutif pour votre application ? Le contrôle d'accès basé sur les rôles (RBAC) est la norme de l'industrie pour gérer les permissions des utilisateurs, mais l'implémenter correctement peut être un défi. Ce tutoriel vous montrera comment construire un système RBAC robuste en utilisant un exemple concret de système de gestion de contenu (CMS).

En suivant ce guide, vous apprendrez :

  • ✨ Comment concevoir et mettre en œuvre des permissions fines qui vous donnent un contrôle précis
  • 🔒 Meilleures pratiques pour organiser les permissions en rôles significatifs
  • 👤 Techniques pour gérer efficacement la propriété des ressources
  • 🚀 Moyens de rendre votre système d'autorisation évolutif et facile à maintenir
  • 💡 Mise en œuvre pratique en utilisant un exemple réel de CMS

Le code source complet de ce tutoriel est disponible sur GitHub.

Comprendre les fondamentaux du RBAC

Le contrôle d'accès basé sur les rôles est plus que simplement attribuer des permissions aux utilisateurs. Il s'agit de créer une approche structurée de l'autorisation qui équilibre sécurité et facilité de maintenance.

Vous pouvez en apprendre davantage sur Qu'est-ce que RBAC dans l'Auth Wiki.

Voici les principes clés que nous suivrons dans notre implémentation :

Conception de permissions fines

Les permissions fines vous donnent un contrôle précis sur ce que les utilisateurs peuvent faire dans votre système. Au lieu de niveaux d'accès larges comme "admin" ou "utilisateur", nous définissons des actions spécifiques que les utilisateurs peuvent effectuer sur les ressources. Par exemple :

  • read:articles - Voir n'importe quel article dans le système
  • create:articles - Créer de nouveaux articles
  • update:articles - Modifier les articles existants
  • publish:articles - Changer l'état de publication des articles

Propriété et contrôle d'accès des ressources

La propriété des ressources est un concept fondamental dans la conception d'autorisation de notre CMS. Bien que le RBAC définisse quelles actions différents rôles peuvent effectuer, la propriété ajoute une dimension personnelle au contrôle d'accès :

  • Les auteurs ont automatiquement accès aux articles qu'ils ont créés
  • Ce modèle de propriété naturelle signifie que les auteurs peuvent toujours voir et éditer leur propre contenu
  • Le système vérifie à la fois les permissions de rôle OU la propriété lorsqu'il gère les opérations d'article
  • Par exemple, même sans la permission update:articles, un auteur peut toujours éditer ses propres articles
  • Cette conception réduit le besoin de permissions de rôle supplémentaires tout en maintenant la sécurité

Cette approche à double couche (rôles + propriété) crée un système plus intuitif et sécurisé. Les éditeurs et admins peuvent toujours gérer tout le contenu par le biais de leurs permissions de rôle, tandis que les auteurs maintiennent le contrôle sur leur propre travail.

Conception d'APIs sécurisées

Commençons par concevoir la fonctionnalité principale de notre CMS à travers ses points de terminaison API :

Implémenter le contrôle d'accès pour votre API

Pour chaque point de terminaison, nous devons considérer deux aspects du contrôle d'accès :

  1. Propriété des ressources - L'utilisateur possède-t-il cette ressource ?
  2. Permissions basées sur les rôles - Le rôle de l'utilisateur permet-il cette opération ?

Voici comment nous allons gérer l'accès pour chaque point de terminaison :

Point de terminaisonLogique de contrôle d'accès
GET /api/articles- Quiconque avec la permission list:articles, OU les auteurs peuvent voir leurs propres articles
GET /api/articles/:id- Quiconque avec la permission read:articles, OU l'auteur de l'article
POST /api/articles- Quiconque avec la permission create:articles
PATCH /api/articles/:id- Quiconque avec la permission update:articles, OU l'auteur de l'article
DELETE /api/articles/:id- Quiconque avec la permission delete:articles, OU l'auteur de l'article
PATCH /api/articles/:id/published- Uniquement les utilisateurs avec la permission publish:articles

Créer un système de permissions évolutif

En fonction de nos exigences d'accès à l'API, nous pouvons définir ces permissions :

PermissionDescription
list:articlesVoir la liste de tous les articles dans le système
read:articlesLire le contenu complet de n'importe quel article
create:articlesCréer de nouveaux articles
update:articlesModifier n'importe quel article
delete:articlesSupprimer n'importe quel article
publish:articlesChanger le statut de publication

Notez que ces permissions ne sont nécessaires que lors de l'accès aux ressources que vous ne possédez pas. Les propriétaires d'articles peuvent automatiquement :

  • Voir leurs propres articles (pas besoin de read:articles)
  • Éditer leurs propres articles (pas besoin de update:articles)
  • Supprimer leurs propres articles (pas besoin de delete:articles)

Construire des rôles efficaces

Maintenant que nous avons défini notre API et nos permissions, nous pouvons créer des rôles qui regroupent ces permissions de manière logique :

Permission/Rôle👑 Admin📝 Éditeur✍️ Auteur
DescriptionAccès complet au système pour la gestion complète du contenuPeut voir tous les articles et contrôler le statut de publicationPeut créer de nouveaux articles dans le système
list:articles
read:articles
create:articles
update:articles
delete:articles
publish:articles

Note : Les auteurs ont automatiquement les permissions de lecture/mise à jour/suppression pour leurs propres articles, indépendamment des permissions de rôle.

Chaque rôle est conçu avec des responsabilités spécifiques en tête :

  • Admin : A un contrôle complet sur le CMS, y compris toutes les opérations d'article
  • Éditeur : Se concentre sur la révision du contenu et la gestion de la publication
  • Auteur : Se spécialise dans la création de contenu

Cette structure de rôle crée une séparation claire des préoccupations :

  • Les auteurs se concentrent sur la création de contenu
  • Les éditeurs gèrent la qualité et la visibilité du contenu
  • Les admins maintiennent le contrôle global du système

Configurer le RBAC dans Logto

Avant de commencer, vous devez créer un compte dans Logto Cloud, ou vous pouvez également utiliser une instance Logto auto-hébergée en utilisant la version OSS de Logto.

Mais pour ce tutoriel, nous utiliserons Logto Cloud pour plus de simplicité.

Configuration de votre application

  1. Allez dans "Applications" dans la console Logto pour créer une nouvelle application react
    • Nom de l'application : Système de gestion de contenu
    • Type d'application : Application Web traditionnelle
    • URI de redirection : http://localhost:5173/callback

Application React CMS

Configuration des ressources API et des permissions

  1. Allez dans "Ressources API" dans la console Logto pour créer une nouvelle ressource API
    • Nom de l'API : API CMS
    • Identifiant de l'API : https://api.cms.com
    • Ajouter des permissions à la ressource API
      • list:articles
      • read:articles
      • create:articles
      • update:articles
      • publish:articles
      • delete:articles

Détails de la ressource API CMS

Création de rôles

Allez dans Rôles dans la console Logto pour créer les rôles suivants pour le CMS

  • Admin
    • avec toutes les permissions
  • Éditeur
    • avec read:articles, list:articles, publish:articles
  • Auteur
    • avec create:articles

Rôle Admin

Rôle Éditeur

Rôle Auteur

Attribution de rôles aux utilisateurs

Allez dans la section "Gestion des utilisateurs" dans la console Logto pour créer des utilisateurs.

Dans l'onglet "Rôles" des détails de l'utilisateur, vous pouvez attribuer des rôles à l'utilisateur.

Dans notre exemple, nous créons 3 utilisateurs avec les rôles suivants :

  • Alex : Admin
  • Bob : Éditeur
  • Charlie : Auteur

Gestion des utilisateurs

Détails de l'utilisateur - Alex

Intégrer votre frontend avec Logto RBAC

Maintenant que nous avons configuré le RBAC dans Logto, nous pouvons commencer à l'intégrer dans notre frontend.

Tout d'abord, suivez les Démarrages rapides de Logto pour intégrer Logto dans votre application.

Dans notre exemple, nous utilisons React pour la démonstration.

Après avoir configuré Logto dans votre application, nous devons ajouter les configurations RBAC pour que Logto fonctionne.

N'oubliez pas de vous déconnecter et de vous reconnecter pour que ce changement prenne effet si vous êtes déjà connecté.

Lorsque l'utilisateur se connecte avec Logto et demande un jeton d'accès pour les ressources API spécifiées ci-dessus, Logto ajoutera les scopes (permissions) liés au rôle de l'utilisateur au jeton d'accès.

Vous pouvez utiliser getAccessTokenClaims du hook useLogto pour obtenir les scopes du jeton d'accès.

Et vous pouvez utiliser userScopes pour vérifier si l'utilisateur a la permission d'accéder à la ressource.

Intégrer votre backend avec Logto RBAC

Il est maintenant temps d'intégrer Logto RBAC dans votre backend.

Middleware d'autorisation du backend

Tout d'abord, nous devons ajouter un middleware dans le backend pour vérifier les permissions des utilisateurs, vérifier si l'utilisateur est connecté et déterminer s'il dispose des permissions nécessaires pour accéder à certaines API.

Comme vous pouvez le voir, dans ce middleware, nous vérifions si la requête du frontend contient un jeton d'accès valide et nous vérifions si l'audience du jeton d'accès correspond à la ressource API que nous avons créée dans la console Logto.

La raison pour laquelle nous vérifions la ressource API est que notre ressource API représente en réalité les ressources de notre backend CMS, et toutes les permissions de notre CMS sont associées à cette ressource API.

Étant donné que cette ressource API représente les ressources CMS dans Logto, dans notre code frontend, nous incluons le Jeton d'accès correspondant lors des requêtes API vers le backend :

Nous pouvons maintenant utiliser le middleware requireAuth pour protéger nos points de terminaison API.

Protection des points de terminaison API

Pour les APIs qui ne devraient être accessibles qu'aux utilisateurs ayant des permissions spécifiques, nous pouvons ajouter des restrictions directement dans le middleware. Par exemple, l'API de création d'article ne devrait être accessible qu'aux utilisateurs ayant la permission create:articles :

Pour les APIs qui nécessitent de vérifier à la fois les permissions et la propriété des ressources, nous pouvons utiliser la fonction hasScopes. Par exemple, dans l'API de liste d'articles, les utilisateurs avec la permission list:articles peuvent accéder à tous les articles, tandis que les auteurs peuvent accéder à leurs propres articles créés :

À ce stade, nous avons complété l'implémentation du RBAC. Vous pouvez consulter le code source complet pour voir l'implémentation complète.

Tester l'implémentation du RBAC dans le CMS

Maintenant, testons notre implémentation du RBAC dans le CMS en utilisant les trois utilisateurs que nous venons de créer.

Tout d'abord, connectons-nous respectivement en tant qu'Alex et Charles et créons quelques articles.

Puisqu'Alex a le rôle d'Admin, il peut créer, supprimer, mettre à jour, publier et voir tous les articles.

Tableau de bord CMS - Alex

Charles, ayant le rôle d'Auteur, ne peut que créer ses propres articles et ne peut voir, mettre à jour et supprimer que les articles qu'il possède.

Tableau de bord CMS - Charles - Liste des articles

Bob, avec le rôle d'Éditeur, peut voir et publier tous les articles mais ne peut pas les créer, les mettre à jour ni les supprimer.

Tableau de bord CMS - Bob

Conclusion

Félicitations ! Vous avez appris comment implémenter un système RBAC robuste dans votre application.

Pour des scénarios plus complexes, tels que la création d'applications multi-locataires, Logto fournit un support organisationnel complet. Consultez notre guide Construire une application SaaS multi-locataire : Un guide complet de la conception à l'implémentation pour en savoir plus sur l'implémentation du contrôle d'accès à l'échelle de l'organisation.

Bon codage ! 🚀