Die beste Autorisierungsstrategie hängt kurz- oder langfristig vom Umfang Ihrer Anwendungen ab.
Monolithisches oder einfaches Web mit privatem Login
Wenn Sie beispielsweise nur ein einfaches (MERN) Web mit einem einfachen Backend (API-Rest) oder eine monolithische Anwendung wie diese haben mernes Beispiel Mit einem internen oder privaten Login in Ihrer Organisation könnte Ihre Autorisierungsstrategie so einfach sein wie:
- (1*) /login-Schnellroute, die Benutzer/Passwort empfängt, sie in der Datenbank validiert und das klassische jwt-Token und eine Reihe von Optionen (Reaktionsrouten) zurückgibt, auf die der Benutzer Zugriff haben sollte
- Web-App (reagieren) muss Seiten rendern, deren Routen mit den empfangenen Routen übereinstimmen
- Web-App muss das empfangene Token an jeden API-Rest-Endpunktaufruf senden
- Wenn API den Aufruf von React Web erhält, muss das Vorhandensein von Token als Header validiert werden. Wenn nicht vorhanden, muss ein 403-Fehler zurückgegeben werden.
- (2*) Wenn ein Token vorhanden ist, muss versucht werden, es zu validieren (wohlgeformt, nicht abgelaufen, korrekte Signatur usw.).
- (3*)Wenn es sich um ein gültiges Token handelt, müssen Sie eine letzte Überprüfung durchführen:Darf ein Benutzer mit der Rolle "Gast" ein
DELETE
ausführen zu einem Endpunkt/user/100
. - (4*) Die klassische Lösung besteht darin, einige Tabellen in Ihrer Datenbank zu haben, wie:user, roles, user_roles, role_permission, permission_option. Die Optionstabelle muss alle Ihre API-Endpunkte und ihre Methode registriert haben. Dies könnte auch verwendet werden, um die Beziehung zwischen Benutzer <:> Webrouten herzustellen. Überprüfen Sie dies
Moderne Anforderungen
Moderne und große Organisationen benötigen:
- Anmeldungen in sozialen Netzwerken
- Interne/Externe Nutzer
- Nicht interaktive Anmeldungen (Roboter, Planer usw.)
- Mehrere Web-Apps
- Mehrere mobile Apps
- Viel API-Ruhe
Für diesen Fall ist die MERN-App keine gute Wahl, da sie ALL-IN-ONE ist. Eine gängige Strategie zur Implementierung der vorherigen Anforderungen besteht darin, mehrere Artefakte auf mehreren Servern bereitzustellen:
- Web-App (Reagieren, Vue, Winkel, Linkstart usw.)
- API-Rest (nodejs + expres, java, python usw.)
- Authentifizierung/Autorisierung:oauth2-Plattform/Anbieter, Identitäts-/Zugriffsplattformen usw.
In diesem Fall müssen Sie Ihre MERN-App in mehrere bereitstellbare Artefakte aufteilen:Web, API und Sicherheit.
Oauth2
Unabhängig davon, ob Sie sich nur um die Anmeldung kümmern oder die Authentifizierung und Autorisierung für Ihre Webs, APIs und möglicherweise Ihre mobilen Apps sicherstellen möchten, benötigen Sie:OAUTH2
Sie könnten Ihre eigene Sicherheitsplattform unter Berücksichtigung von (1*), (2*), (3*) und (4*) entwickeln oder so etwas verwenden wie:
- auth0
- Schlüsselschalter usw.
Weitere Details hier:https://stackoverflow.com/a/62049409
Ihre Fragen
- Welche Methode ist Ihrer Meinung nach besser?
- Ich denke, wenn Sie auth0 verwenden, sparen Sie Zeit und Mühe. Mit auth0 benötigen Sie nur eine einfache Express-App mit einigen Endpunkten wie /login, /callback usw. Oder wenn Sie auth0 + Passport.js verwenden, werden diese Endpunkte von Passport.js verwaltet
- Ich rate Ihnen, überprüfen Sie, wie der OAUTH2-Fluss funktioniert, bevor Sie auth0 mit/ohne Passport verwenden. Dieser Link hat mir sehr geholfen.
- Was ist der Unterschied zwischen 2 und 3,
- Wie ich gelesen habe, bieten auth0 und andere Plattformen einen Benutzerverwaltungsdienst an oder können eine Verbindung zu Ihrem Benutzerdienst herstellen (AD/LDAP, Datenbank, API usw.). Also
- Gibt es eine Möglichkeit, Regeln im Passport zu implementieren (z. B. neue Benutzer beim ersten Login umzuleiten)
- Ja. Sie können etwas Logik hinzufügen, wenn der Rückruf in Ihren Nodejs mit oder ohne Passport umgeleitet wird.
- Wenn ich Passport mit MongoDB implementiere und meine Datenbank Hunderte von Benutzern hat, wie kann ich sie verwalten?
- Heutzutage unterstützen Datenbanken viele Zeilen. Versuchen Sie also, Ihre Produktionsdatenbank zu optimieren oder zu überwachen. Eine weitere Möglichkeit besteht darin, einen Datenbankadministrator mit der Durchführung dieser Aufgaben zu beauftragen.
Referenzen
- https://www.digitalocean.com/ community/tutorials/an-introduction-to-oauth-2
- https://auth0.com/user-management
- https://stackoverflow.com/a/62049409
- https://fiware-tutorials.readthedocs. io/en/latest/roles-permissions/index.html
- https://dba. stackexchange.com/questions/36935/best-relational-database-structure-for-this-data
- https://www.mind -it.info/2010/01/09/nist-rbac-data-model/
- Verwalten der einmaligen Anmeldung mit Passportjs für meine eigenen Webanwendungen – gemeinsame Nutzung der Anmeldung
- https://aws.amazon.com/blogs/apn/how-to-integrate-rest-apis-with-single-page-apps-and-secure-them -using-auth0-part-1/
- Facebook OAuth-Sicherheit mit Passport-Facebook
- Asynchrone Django-, Ajax-, Jquery-Informationen
- relationale Modelle