paint-brush
Wie ich die Zugriffsgenehmigung in unserem Open-Source-Projekt implementiert habeby@hacker6428749

Wie ich die Zugriffsgenehmigung in unserem Open-Source-Projekt implementiert habe

9m2024/07/25
Read on Terminal Reader

Makaut Buddy, eine Plattform zum Teilen von Notizen für Universitätsstudenten, hatte Probleme, die Uploads der Benutzer sicher zu verwalten. In diesem Artikel wird erklärt, wie die Implementierung einer rollenbasierten Zugriffskontrolle (RBAC) mit Permit.io das Problem löste und sicherstellte, dass nur autorisierte Benutzer Inhalte hochladen können. Dies erhöhte die Sicherheit der Plattform.
featured image - Wie ich die Zugriffsgenehmigung in unserem Open-Source-Projekt implementiert habe
undefined HackerNoon profile picture
0-item
1-item


Vor ein paar Tagen kamen einige meiner Kollegen auf mich zu und sprachen mich mit einem Problem mit einer Open-Source-Anwendung namens Makaut Buddy an. Dabei handelt es sich um eine für unsere Universität entwickelte Plattform zum Teilen von Notizen, die Studenten dabei helfen soll, ihre Notizen, Fragen aus früheren Prüfungen und YouTube- Tutorials effizient auszutauschen.


Obwohl sie erfolgreich ein System zum Hochladen von Ressourcen entwickelt hatten, standen sie vor der Herausforderung, sicherzustellen, dass nur autorisierte Personen Inhalte hochladen konnten.


Wie in der Demo unten gezeigt, konnte jeder Benutzer nach der Anmeldung eine Ressource erstellen. Dies stellte ein großes Problem dar, da wir nicht kontrollieren konnten, was Benutzer hochladen. Manche luden möglicherweise sogar schädliche oder verstörende Inhalte hoch.

Zunächst definierten sie eine Administratorrolle und erteilten einer ausgewählten Gruppe von Personen Administratorrechte. Mit zunehmender Anzahl von Rollen wurde der Code jedoch zunehmend komplexer und schwieriger zu verwalten.


Da kam mir die Idee, diesen Artikel zu schreiben, um das Bewusstsein für effiziente Möglichkeiten der Autorisierungsverwaltung mithilfe eines rollenbasierten Zugriffskontrollmodells (RBAC) und der Hilfe von Autorisierungstools von Drittanbietern wie Permit zu schärfen.


Zusätzlich zur Implementierung von RBAC haben wir auch ein System zur Genehmigung von Zugriffsanfragen eingeführt. Dieses System stellt sicher, dass jeder Benutzer, der Inhalte hochladen möchte, zuerst Zugriff anfordern muss, den ein Administrator dann genehmigen oder verweigern kann. Diese zusätzliche Sicherheitsebene hilft uns, die Integrität der Inhalte auf Makaut Buddy aufrechtzuerhalten.


In diesem Artikel habe ich JavaScript als Programmiersprache und Next.js als Framework verwendet. Die hier besprochenen Konzepte sind jedoch nicht sprachspezifisch und Sie können sie in Ihrer bevorzugten Programmiersprache implementieren.


Am Ende dieses Artikels wissen Sie, wie Sie ein grundlegendes RBAC-Modell in Ihrer Anwendung implementieren.


Nachdem das gesagt ist, tauchen wir ein!


Was ist Autorisierung?

Erinnern Sie sich an die Morgen, an denen Sie zur Schule eilen mussten? Der Sicherheitsbeamte, der Ihren Ausweis überprüft, ist ein perfektes Beispiel für Authentifizierung. Er überprüft Ihre Identität als Student, der auf den Campus darf. Aber das ist nur der erste Schritt. Selbst nach der Identifizierung würden Sie nicht einfach in jeden beliebigen Hörsaal gehen, oder? Hier kommt die Authentifizierung ins Spiel.


Stellen Sie sich Ihren Stundenplan als Ihre Berechtigung vor. Er gewährt Ihnen Zugang zu bestimmten Bereichen (Klassenräumen) basierend auf Ihrer Rolle (Student, der an diesem Kurs teilnimmt). Sie wären nicht berechtigt, das Lehrerzimmer oder den gesperrten Bereich der Bibliothek zu betreten – auch wenn Sie Student (authentifiziert) sind.


Der Unterschied zwischen Authentifizierung und Autorisierung ist wie die Frage „Wer sind Sie?“ gegenüber „Was dürfen Sie tun?“

Warum brauchen wir ein RBAC-Modell zur Autorisierung 🤔?

Autorisierung ist in jeder Organisation wichtig, da sie verhindert, dass Personen Aktionen ausführen, zu denen sie nicht autorisiert sind. Dies gewährleistet die Sicherheit der Organisation und hilft, Verluste zu vermeiden.


Lassen Sie uns die obige Aussage anhand eines Beispiels veranschaulichen:

In einem Unternehmen gibt es einige erfahrene Ingenieure und einige Praktikanten, die noch in die Praxis einsteigen. Sie können sich vorstellen, was für ein Desaster es wäre, wenn sowohl der erfahrene Ingenieur als auch der Praktikant die gleichen Berechtigungen hätten. Die Praktikanten, die noch in der Lernphase sind, könnten unwissentlich Fehler machen, für die das Unternehmen bezahlen muss. In solchen Situationen funktioniert das rollenbasierte Zugriffskontrollmodell am besten, da die Berechtigungen nicht einzelnen Personen, sondern Rollen zugewiesen werden. Beispielsweise kann nur ein erfahrener Ingenieur oder ein technischer Leiter Ressourcen löschen, während alle Praktikanten Ressourcen nur anzeigen und verwalten können.


Sehen wir uns als Nächstes an, wie wir RBAC in einer Anwendung implementieren können.

So implementieren Sie RBAC in einer App:

1. Rollen und Berechtigungen definieren

Zuerst müssen wir Rollen definieren und jeder Rolle Berechtigungen zuweisen.

Hinweis: Eine Rolle ist die Position oder Aufgabe, die jemand in einer Organisation hat. Wir benötigen Rollen, damit wir zwischen einzelnen Personen anhand der dieser Rolle zugewiesenen Berechtigungen oder Privilegien unterscheiden können.

2. Benutzern Rollen zuweisen

Wir müssen jedem Benutzer der Anwendung eine Rolle zuweisen können. Dies geschieht im Allgemeinen, nachdem sich der Benutzer angemeldet hat.

3. Erstellen Sie eine Autorisierungs-API

Wir benötigen eine API in unserem Backend, die die vom Benutzer auszuführenden Operationen aufnimmt und die Autorisierung des Benutzers überprüft. Das folgende Diagramm soll Ihnen ein besseres Verständnis vermitteln:



Wir werden das gesamte Modell jedoch nicht von Grund auf neu implementieren. Stattdessen verwenden wir ein Autorisierungstool eines Drittanbieters namens Permit, das den gesamten Prozess der Autorisierung für uns sehr reibungslos und effizient gestaltet, sodass Sie an den Funktionen arbeiten können, die wirklich wichtig sind.


Das folgende Diagramm zeigt Ihnen, wie wir Permit nutzen, um RBAC in unseren Anwendungen zu implementieren:


Implementierung des RBAC-Modells

In diesem Abschnitt gehen wir die Schritte zur Implementierung der rollenbasierten Zugriffskontrolle (RBAC) mit Permit durch.


Schritt 1: Erstellen Sie ein Permit-Konto und einen Arbeitsbereich

Da wir zum Einrichten eines RBAC-Modells ein Permit verwenden, müssen wir zuerst ein Permit-Konto und einen Arbeitsbereich erstellen:


Schritt 2: Erstellen einer Ressource

Jetzt müssen wir eine Ressource erstellen, also die Entität, auf die wir in unserer Anwendung den Zugriff steuern möchten.

In einer Anwendung zum Erstellen von Notizen wäre die Ressource beispielsweise „Notizen“ und die Aktionen könnten „Erstellen “, „Lesen“, „Aktualisieren“ und „Löschen“ sein.


So erstellen Sie eine Ressource:

  1. Gehen Sie zum Abschnitt „Richtlinien“.
  2. Navigieren Sie zur Registerkarte „Ressourcen“.
  3. Erstellen Sie eine neue Ressource, indem Sie die erforderlichen Details eingeben.



Im obigen Beispiel lautet der Ressourcenname „Notes“ und die Aktionen, die der Benutzer ausführen darf, sind „Erstellen“, „Lesen“, „Aktualisieren“ und „Löschen“.

Schritt 3: Rollen definieren

Nachdem wir die Ressource erstellt haben, müssen wir die Rollen definieren, die in unserer Anwendung vorhanden sein werden.


Da es sich bei der Anwendung in diesem Fall um eine Anwendung zum Teilen von Notizen für eine Universität handelt, lauten die Rollen wie folgt:

  • Administrator: kann Ressourcen erstellen und lesen.
  • Student: kann Ressourcen lesen.




Schritt 4: Aktionen den Rollen zuweisen

Nachdem wir beide Rollen erstellt haben, müssen wir nun die Aktionen zuweisen, die jede Rolle in unserem Richtlinieneditor ausführen kann, wie unten gezeigt:


Schritt 5: Backend-APIs konfigurieren

Nachdem Ihr Permit-Konto nun konfiguriert ist, können Sie mit der Erstellung der Backend-APIs zur Kommunikation mit Permit beginnen. Wir verwenden das von Permit bereitgestellte Node.js SDK. Das SDK für Ihre bevorzugte Programmiersprache finden Sie in der Permit-Dokumentation.


Benutzer synchronisieren und Standardrolle zuweisen

Zunächst müssen wir sicherstellen, dass jeder Benutzer, der sich in unserer Anwendung anmeldet, mit dem Permission-Verzeichnis synchronisiert und ihm die Standardrolle „Student“ zugewiesen wird.


Dazu müssen wir eine Backend-API wie unten gezeigt erstellen:

Diese API macht zwei Dinge:

  • Initialisiert die Permit-API.
  • Erstellt einen neuen Benutzer mithilfe der createUser API.
  • Weist mithilfe der assignRole API eine Standardrolle zu.



Weitere Informationen zu allen von Permit bereitgestellten APIs finden Sie unter Permit-Dokumente.


Benutzerrolle abrufen

Als Nächstes müssen wir eine Backend-API erstellen, die die Rolle des Benutzers von Permit.io abruft und an das Frontend zurücksendet.

Die unten gezeigte API ruft den Benutzer mithilfe von permit.api.users.get(user_key) ab.



Diese API erhält die Benutzerrolle, mit der wir unsere Front-End-Komponenten so manipulieren können, dass nur Personen mit Sonderrollen sie sehen können.


Sie können auch die Funktion allow.check() ausprobieren, um zu überprüfen, ob ein Benutzer mit einer bestimmten Rolle berechtigt ist, einen Vorgang auszuführen.

Damit haben wir erfolgreich ein RBAC-Modell mit Permit implementiert. Jetzt können wir die Backend-Routen mit dem Frontend-Framework oder der Bibliothek Ihrer Wahl integrieren, um das Setup abzuschließen.

Implementierung eines Zugriffsgenehmigungssystems:

Um unser Setup abzuschließen, benötigen wir eine Komponente, die es Benutzern ermöglicht, Rollen-Upgrades anzufordern:

  • Ein normaler Benutzer ohne Administratorrechte kann das Berechtigungselement anzeigen und Administratorrechte anfordern.



  • Ein Administratorbenutzer kann eingehende Anfragen für Rollen-Upgrades von anderen Benutzern genehmigen oder ablehnen.


Schritt 1: Erstellen eines Genehmigungselements

Permit Elements sind Teil von „Permit Share-If“, einer Suite vorgefertigter, einbettbarer UI-Komponenten, die die Zugriffsfreigabe in Anwendungen zum Kinderspiel machen. Sie wurden entwickelt, um eine voll funktionsfähige Zugriffskontrolle zu bieten und machen die Delegierung der Berechtigungsverwaltung an Ihre Benutzer einfach und sicher.


  • Um dies umzusetzen, müssen wir zunächst ein Permission-Element erstellen:
    • Gehen Sie im Genehmigungs-Dashboard zur Registerkarte „Elemente“.
    • Klicken Sie im Abschnitt „Benutzerverwaltung“ auf „Element erstellen“.



  • Dann müssen wir das Formular mit den erforderlichen Informationen ausfüllen, wie unten gezeigt
    • Weisen Sie der Rolle „Administrator“ den Arbeitsbereichsbesitzer zu.
    • Weisen Sie dem Viewer-Bereich die Rolle „Student“ zu.
    • Legen Sie die Standardrolle auf „Student“ fest.



  • Speichern Sie das Element und erstellen Sie unter Zugriffsanforderung ein neues Element:


  • Füllen Sie dann die Informationen für die Zugriffsanfrage aus
    • Wählen Sie das Benutzerverwaltungselement aus, um Ihr Zugriffsanforderungselement zu verbinden.
    • Klicken Sie auf „Erstellen“, um das Element fertigzustellen.



  • Als nächstes bearbeiten wir das Benutzerverwaltungselement
    • Gehen Sie zurück zum Benutzerverwaltungselement und bearbeiten Sie es.
    • Wählen Sie in der Benutzerverwaltung das Element „Access Request“ als Genehmigungskomponente aus.



Das ist es, wir haben die Elemente erstellt.

Schritt 2: Backend-API für die Benutzeranmeldung erstellen

Bevor wir die Elemente verwenden können, müssen wir eine Backend-API für die Anmeldung des Benutzers beim Permission-Element erstellen.

Hinweis: Es ist wichtig, den Benutzer so früh wie möglich anzumelden, am besten direkt nach der Registrierung.


Schauen wir uns nun den Code an:

API-Code, der am Endpunkt /api/v1/login_permit/?userkey=user_key bereitgestellt wird:



Schritt 3: Frontend-Code zur Implementierung der Anmeldung

Der Frontend-Code zur Implementierung der Anmeldung sieht folgendermaßen aus:



Das war’s, wir haben unseren Code eingerichtet.

Schritt 4: Iframes ins Frontend integrieren

Jetzt müssen wir nur noch zum Genehmigungs-Dashboard gehen und sowohl das Benutzerverwaltungs-Iframe als auch das Zugriffsanforderungs-Iframe kopieren, wie unten gezeigt:



Nachdem wir nun den Code haben, müssen wir das iframe zu unserem Frontend hinzufügen, wo wir unseren Benutzern die Elemente anzeigen möchten. Dazu müssen wir:

  • Zeigen Sie Benutzern mit der Administratorrolle das Benutzerverwaltungselement an.
  • Zeigen Sie Benutzern mit der Rolle „Student“ das Zugriffsanforderungselement an.


Damit haben wir erfolgreich ein Zugriffsgenehmigungssystem eingerichtet, bei dem Benutzer Rollen-Upgrades anfordern und Administratoren diese Anforderungen genehmigen oder ablehnen können.


Demo von RBAC in einer Anwendung zum Teilen von Notizen

  • Demo: Administratorzugriff auf das Upload-Widget

Diese Demo zeigt, wie ein Benutzer mit der Rolle „Admin“ auf das Upload-Widget zugreifen kann



  • Demo: Einschränkungen der Studentenrolle und Zugriffsanforderung

Diese Demo veranschaulicht, wie ein Benutzer mit der Rolle „Student“ das Upload-Widget nicht sehen kann und ein Upgrade auf die Rolle „Admin“ anfordern kann:


  • Demo: Rollenupgrade genehmigen

Diese Demo zeigt, wie privilegierte Benutzer Anfragen für Rollen-Upgrades genehmigen können:


  • Demo: Erweiterter Rollenzugriff auf das Upload-Widget

Diese Demo zeigt, wie ein Benutzer nach der Heraufstufung von „Student“ auf „Admin“ Zugriff auf das Upload-Widget erhält.

Abschluss

Das ist es!


Vielen Dank, dass Sie bis hierher gelesen haben.


In diesem Tutorial haben wir uns mit Autorisierungen befasst und verstanden, warum Autorisierung in jeder Anwendung sehr wichtig ist. Wir haben uns auch angesehen, wie wir Permit einrichten und konfigurieren können, um die Anwendung zu sichern und den Benutzerzugriff basierend auf ihren Rollen zu steuern.


Dieser Artikel ist nur die Spitze des Eisbergs der Autorisierung und des RBAC-Modells. Für eine detailliertere Autorisierung können Sie sich ABAC und ReBAC ansehen.