MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie lässt sich eine Web- und API-Lösung wie MERN Stack am besten authentifizieren und autorisieren?

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