RBAC in der Praxis: Implementierung einer sicheren Autorisierung für deine Anwendung
Kompletter Leitfaden zu Role-Based Access Control (RBAC): Meistere Berechtigungsdesign, Rollenmanagement und sichere Autorisierung mit praktischer CMS-Implementierung.
YijunDeveloper
Verschwenden Sie keine Wochen mit Benutzerauthentifizierung
Bringen Sie sichere Apps schneller mit Logto auf den Markt. Integrieren Sie Benutzerauthentifizierung in Minuten und konzentrieren Sie sich auf Ihr Kernprodukt.
Hast du Schwierigkeiten, ein sicheres und skalierbares Autorisierungssystem für deine Anwendung zu implementieren? Role-Based Access Control (RBAC) ist der Industriestandard zur Verwaltung von Benutzerberechtigungen, aber die korrekte Implementierung kann eine Herausforderung sein. Dieses Tutorial zeigt dir, wie du ein robustes RBAC-System anhand eines praktischen Beispiels aus einem Content-Management-System (CMS) aufbaust.
Indem du diesem Leitfaden folgst, lernst du:
✨ Wie du fein abgestimmte Berechtigungen entwirfst und implementierst, die dir präzise Kontrolle bieten
🔒 Best Practices zur Organisation von Berechtigungen in sinnvollen Rollen
👤 Techniken zur effektiven Verwaltung von Ressourcenbesitz
🚀 Möglichkeiten, dein Autorisierungssystem skalierbar und wartbar zu gestalten
💡 Praktische Implementierung anhand eines realen CMS-Beispiels
Der komplette Quellcode für dieses Tutorial ist auf GitHub verfügbar.
Role-Based Access Control bedeutet mehr als nur das Zuweisen von Berechtigungen an Benutzer. Es geht darum, einen strukturierten Ansatz zur Autorisierung zu schaffen, der Sicherheit und Wartbarkeit in Einklang bringt.
Mehr Informationen darüber, Was ist RBAC findest du im Auth-Wiki.
Hier sind die wichtigsten Prinzipien, denen wir in unserer Implementierung folgen werden:
Fein abgestimmte Berechtigungen bieten dir präzise Kontrolle darüber, was Benutzer in deinem System tun können. Anstatt breiter Zugriffslevel wie "admin" oder "benutzer", definieren wir spezifische Aktionen, die Benutzer mit Ressourcen durchführen können. Zum Beispiel:
read:articles - Alle Artikel im System ansehen
create:articles - Neue Artikel erstellen
update:articles - Bestehende Artikel ändern
publish:articles - Die Veröffentlichungsstatus von Artikeln ändern
Ressourcenbesitz ist ein zentrales Konzept im Autorisierungsdesign unseres CMS. Während RBAC definiert, welche Aktionen verschiedene Rollen ausführen können, fügt der Besitz eine persönliche Dimension zur Zugangskontrolle hinzu:
Autoren haben automatisch Zugriff auf die Artikel, die sie erstellt haben
Dieses natürliche Besitzmodell bedeutet, dass Autoren immer ihre eigenen Inhalte ansehen und bearbeiten können
Das System prüft sowohl Rollenzugriff als auch Besitz, wenn Artikeloperationen durchgeführt werden
Zum Beispiel kann ein Autor auch ohne die Berechtigung update:articles seine eigenen Artikel bearbeiten
Dieses Design reduziert den Bedarf an zusätzlichen Rollenberechtigungen, während es die Sicherheit aufrechterhält
Dieser zweistufige Ansatz (Rollen + Besitz) schafft ein intuitiveres und sichereres System. Verlage und Admins können weiterhin alle Inhalte über ihre Rollenberechtigungen verwalten, während Autoren die Kontrolle über ihre eigenen Arbeiten behalten.
Basierend auf unseren API-Zugriffsanforderungen können wir diese Berechtigungen definieren:
Berechtigung
Beschreibung
list:articles
Die Liste aller Artikel im System ansehen
read:articles
Den vollständigen Inhalt eines Artikels lesen
create:articles
Neue Artikel erstellen
update:articles
Einen Artikel ändern
delete:articles
Einen Artikel löschen
publish:articles
Veröffentlichungsstatus ändern
Beachte, dass diese Berechtigungen nur benötigt werden, wenn auf Ressourcen zugegriffen wird, die du nicht besitzt. Artikelbesitzer können automatisch:
Ihre eigenen Artikel ansehen (keine read:articles benötigt)
Ihre eigenen Artikel bearbeiten (keine update:articles benötigt)
Ihre eigenen Artikel löschen (keine delete:articles benötigt)
Bevor du beginnst, musst du ein Konto in Logto Cloud erstellen, oder du kannst auch eine selbst gehostete Logto-Instanz verwenden, indem du die Logto OSS-Version nutzst.
Aber für dieses Tutorial werden wir Logto Cloud verwenden, um der Einfachheit willen.
Nun, da wir RBAC in Logto eingerichtet haben, können wir anfangen, es in unser Frontend zu integrieren.
Folge zuerst den Logto Quick Starts, um Logto in deine Anwendung zu integrieren.
In unserem Beispiel verwenden wir React zur Demonstration.
Nachdem du Logto in deiner Anwendung eingerichtet hast, müssen wir die RBAC-Konfigurationen hinzufügen, damit Logto funktioniert.
Denke daran, dich abzumelden und erneut anzumelden, damit diese Änderung wirksam wird, falls du bereits angemeldet bist.
Wenn sich der Benutzer mit Logto anmeldet und ein Zugriffstoken für die oben angegebenen API-Ressourcen anfordert, fügt Logto dem Zugriffstoken Bereiche (Berechtigungen) hinzu, die mit der Rolle des Benutzers zusammenhängen.
Du kannst getAccessTokenClaims vom useLogto-Hook verwenden, um die Bereiche aus dem Zugriffstoken zu erhalten.
Und du kannst die userScopes verwenden, um zu überprüfen, ob der Benutzer die Erlaubnis hat, auf die Ressource zuzugreifen.
Zuerst müssen wir eine Middleware im Backend hinzufügen, um Benutzerberechtigungen zu überprüfen, zu verifizieren, ob der Benutzer angemeldet ist, und festzustellen, ob er die notwendigen Berechtigungen hat, um auf bestimmte APIs zuzugreifen.
Wie du sehen kannst, überprüfen wir in dieser Middleware, ob die Frontend-Anfrage ein gültiges Zugriffstoken enthält und ob die Audience des Zugriffstokens mit der API-Ressource übereinstimmt, die wir in der Logto-Konsole erstellt haben.
Der Grund für die Überprüfung der API-Ressource ist, dass unsere API-Ressource tatsächlich die Ressourcen unseres CMS-Backends darstellt und alle unsere CMS-Berechtigungen mit dieser API-Ressource verbunden sind.
Da diese API-Ressource die CMS-Ressourcen in Logto darstellt, schließen wir in unserem Frontend-Code das entsprechende Zugriffstoken bei API-Anfragen an das Backend ein:
Jetzt können wir die requireAuth-Middleware verwenden, um unsere API-Endpunkte zu schützen.
Für APIs, die nur für Benutzer mit bestimmten Berechtigungen zugänglich sein sollten, können wir die Einschränkungen direkt in der Middleware hinzufügen. Zum Beispiel sollte die Artikel-Erstellungs-API nur für Benutzer mit der Berechtigung create:articles zugänglich sein:
Für APIs, die sowohl Berechtigungen als auch Ressourcenbesitz überprüfen müssen, können wir die hasScopes-Funktion verwenden. Zum Beispiel können Benutzer mit der list:articles-Berechtigung im Artikelauflistungs-API auf alle Artikel zugreifen, während Autoren auf ihre eigenen erstellten Artikel zugreifen können:
An diesem Punkt haben wir die RBAC-Implementierung abgeschlossen. Du kannst den kompletten Quellcode ansehen, um die vollständige Implementierung zu sehen.