L'autorisation définit ce qu'un utilisateur authentifié peut faire. Alors que l'authentification confirme l'identité, l'autorisation contrôle l'accès aux ressources et aux actions. Ce guide présente des modèles, des implémentations et des bonnes pratiques pour créer des systèmes d'autorisations robustes.
Authentification vs autorisation
Authentification
Réponse : « Qui es-tu ? » Vérifie l’identité grâce aux informations d’identification.
Autorisation
Réponse : "Que pouvez-vous faire ?". Détermine les autorisations après confirmation de l’identité.
Exemple pratique
L'utilisateur se connecte (authentification). Le système vérifie si vous pouvez accéder au panneau d'administration (autorisation).
Pourquoi l'autorisation est importante
Sans contrôle d'accès approprié, tout utilisateur authentifié peut accéder à n'importe quelle ressource. Des données sensibles sont exposées, des actions destructrices deviennent disponibles. L'autorisation protège les données et les opérations critiques.
Modèles de contrôle d'accès
ACL (Liste de contrôle d'accès)
Liste qui définit qui peut accéder à chaque ressource. Simple, mais ne s'adapte pas bien aux systèmes complexes.
RBAC (Contrôle d'accès basé sur les rôles)
Autorisations attribuées aux rôles, rôles attribués aux utilisateurs. Structure hiérarchique. Modèle le plus courant.
ABAC (Contrôle d'accès basé sur les attributs)
Décisions basées sur des attributs : utilisateur, ressource, environnement. Flexible mais complexe.
ReBAC (Contrôle d'accès basé sur les relations)
Basé sur les relations entre les entités. "Vous pouvez le modifier si vous en êtes propriétaire." Utilisé par Zanzibar (Google).
RBAC en détails
Composants
- Utilisateurs : personnes ou systèmes qui y accèdent.
- Rôles : Ensembles d'autorisations (administrateur, éditeur, visionneuse).
- Autorisations : Actions autorisées (créer, lire, mettre à jour, supprimer).
- Caractéristiques : Objets protégés (posts, utilisateurs, paramètres).
Hiérarchie des rôles
Les rôles peuvent hériter des autres. L'administrateur hérite de Editor, qui hérite de Viewer. Réduit la duplication.
Exemple de structure
| Faire défiler | Autorisations | Portée |
|---|---|---|
| Administrateur | créer, lire, mettre à jour, supprimer | Toutes les ressources |
| Editeur | créer, lire, mettre à jour | Contenu |
| Visionneuse | lire | Contenu public |
Implémentation du RBAC
Base de données
Tableaux pour les utilisateurs, les rôles, les autorisations et les relations (user_roles, role_permissions).
Middleware de vérification
Avant l'action, le middleware vérifie si l'utilisateur dispose de l'autorisation requise.
Décorateurs/Gardes
Dans les frameworks modernes, annotations qui protègent les routes ou les méthodes.
Mise en cache des autorisations
Évitez de consulter la banque à chaque demande. Mettez en cache les autorisations des utilisateurs dans Token ou Redis.
ABAC : flexibilité avancée
Quand l'utiliser
Quand RBAC n’est pas assez expressif. Les règles dépendent du contexte dynamique.
Exemples de politiques
- Vous pouvez modifier si vous êtes l'auteur du document.
- Vous pouvez y accéder si vous êtes dans le même département.
- Vous pouvez approuver si le montant est inférieur à votre limite.
###XACML
Norme pour exprimer les politiques ABAC. Basé sur XML, utilisé dans les environnements d'entreprise.
Autorisations au niveau des ressources
Sécurité au niveau des lignes
Contrôle par registre. L'utilisateur ne voit que ses propres données. PostgreSQL est pris en charge nativement.
Sécurité au niveau des colonnes
Contrôle sur le terrain. Certains champs visibles uniquement pour certains rôles.
Multilocation
Isolement entre locataires. Chaque organisation accède uniquement à ses données.
Autorisations du système d'exploitation
###iOS
L'accès à l'appareil photo, à l'emplacement et aux photos nécessite l'autorisation explicite de l'utilisateur. Info.plist définit les descriptions.
###Android
Autorisations déclarées dans le manifeste. Les autorisations dangereuses nécessitent le consentement de l'exécution.
Bonnes pratiques
- Commandez au moment de l'utilisation, pas à l'avance.
- Expliquez pourquoi vous en avez besoin.
- Exécutez gracieusement si vous êtes refusé.
Jetons et réclamations
Réclamations JWT
Le jeton peut contenir des revendications d'autorisation. Le serveur valide sans consulter la banque.
Portées dans OAuth
Ils définissent à quelles ressources le jeton peut accéder. lire: utilisateurs, écrire: messages.
Soins
Les jetons volumineux ont un impact sur les performances. Équilibrez les réclamations en ligne et la consultation.
Autorisation dans les API
Vérification par point de terminaison
Chaque point de terminaison vérifie une autorisation spécifique avant de s'exécuter.
Serveurs de ressources
Le serveur API valide les jetons et autorise en fonction des étendues et des revendications.
Point de décision politique (PDP)
Service centralisé qui décide des autorisations. L’Open Policy Agent (OPA) en est un exemple.
Modèles de mise en œuvre
Refuser par défaut
Refuser l’accès sauf autorisation explicite. Sécurité intégrée.
Moindre privilège
Accorder le minimum nécessaire. L'utilisateur ne peut que ce dont il a besoin.
Séparation des tâches
Les tâches critiques nécessitent plusieurs personnes. Personne ne fait tout seul.
Audit et journalisation
Enregistrer les décisions
Journal indiquant qui a tenté d'accéder à quoi et si cela a été autorisé ou refusé.
Détection d'anomalies
Modèles suspects : nombreux refus, accès en dehors des heures d'ouverture, élévation de privilèges.
Conformité
La réglementation exige une piste d’audit. RGPD, SOX, HIPAA.
Erreurs courantes
Vérification uniquement sur le frontend
Le backend devrait toujours vérifier. Le frontend est manipulable.
Rôles codés en dur
Cela rend l’évolution difficile. Utilisez une configuration flexible.
Autorisations excessives
Pour plus de commodité, accordez plus d’accès que nécessaire. Principe du moindre privilège.
Manque de tests
Des autorisations mal testées créent des failles. Testez les scénarios d’accès.
Outils et bibliothèques
Caisse
Bibliothèque d'autorisation avec prise en charge de plusieurs modèles (RBAC, ABAC, ACL).
Agent de stratégie ouverte (OPA)
Moteur de politique. Décisions d'autorisation sous forme de code.
Auth0FGA
Autorisation à grain fin. Modèle similaire au Zanzibar de Google.
Ory Keto
Implémentation open source inspirée de Zanzibar.
Multilocation et autorisation
Isolement
Les locataires n'accèdent pas aux données des autres. Vérification de toutes les requêtes.
Rôles par locataire
L'utilisateur peut avoir différents rôles dans différentes organisations.
Super administrateur
Accès entre locataires pour les opérations de la plateforme. Utiliser avec une extrême prudence.
Conclusion
Une autorisation bien mise en œuvre protège les données et garantit que les utilisateurs ne font que ce qu'ils sont censés faire. Choisissez le modèle approprié (RBAC pour la plupart), implémentez avec le refus par défaut, testez minutieusement et auditez l'accès. La sécurité est un processus continu et non une configuration ponctuelle.
##FAQ
1) Le RBAC est-il suffisant dans la plupart des cas ? Oui. RBAC sert bien la plupart des applications. ABAC est destiné aux scénarios plus complexes.
2) Où stocker les autorisations ? Base de données pour la source de vérité. Cache (revendications JWT, Redis) pour les performances.
3) Comment gérer une autorisation refusée ? Renvoie 403 Interdit avec un message générique. Ne révélez pas les détails de la politique.
4) Ai-je besoin d'un service d'autorisation distinct ? Pour les grands systèmes, cela peut en valoir la peine. Pour les petites applications, la bibliothèque intégrée suffit.
5) Comment tester l'autorisation ? Tests automatisés qui vérifient les accès autorisés et refusés par rôle/autorisation.
A lire aussi
- Autorisation et permissions - Principes fondamentaux des meilleures pratiques
- Autorisation et permissions : bonnes pratiques qui empêchent les accès non autorisés
- Authentification des applications : Guide complet de sécurité et d'expérience utilisateur -Introduction à Deno : Guide pratique pour le développement moderne
- Cloud Native Security : Sécuriser les infrastructures Kubernetes
- Actions serveur dans Next.js : mutations sans maintenir d'API juste pour ça
