sql >> Databasteknik >  >> NoSQL >> MongoDB

Vad är det bästa sättet att autentisera och auktorisera en webb- och api-lösning som MERN Stack?

Den bästa auktoriseringsstrategin beror på omfattningen av dina applikationer på kort eller lång sikt.

Monolitisk eller enkel webb med privat inloggning

Till exempel, om du bara kommer att ha en enkel (MERN) webb med en enkel backend (api rest) eller en monolitisk applikation som denna mernexempel med en intern eller privat inloggning i din organisation kan din auktoriseringsstrategi vara så enkel som:

  • (1*) /inloggningsexpressrutt som tar emot användare/lösenord, validerar dem i databasen och returnerar den klassiska jwt-token och en rad alternativ (reagerarvägar) som användaren ska ha tillgång till
  • webbappen (reagera) måste rendera sidor vars rutter matchar de mottagna rutterna
  • webbappen måste skicka den mottagna token till valfri anrop av API-vilaslutpunkt
  • när api tar emot anropet från React Web, måste validera förekomsten av token som en header. Om det inte finns, måste returnera ett 403-fel.
  • (2*) Om token finns, måste du försöka validera den (välformad, inte utgången, korrekt signatur, etc).
  • (3*)Om det är en giltig token måste du utföra en sista validering:Får användare med rollen "gäst" köra en DELETE till en slutpunkt /user/100 .
  • (4*) Klassisk lösning är att ha några tabeller i din databas som:user, roles, user_rolles, role_permission, permission_option. Alternativtabellen måste ha registrerat alla dina API-slutpunkter och dess metod. Detta kan också användas för att skapa relationen mellan användarens <:> webbrutter. Kolla detta

Moderna krav

Moderna och stora organisationer kräver:

  • Inloggningar till sociala nätverk
  • Interna/externa användare
  • Inte interaktiva inloggningar (robotar, schemaläggare, etc.)
  • Flera webbappar
  • Flera mobilappar
  • Mycket Api Rest

I det här fallet är MERN-appen inte ett bra val eftersom den är ALLT-I-ETT. Vanlig strategi för att implementera de tidigare kraven är att ha flera artefakter utplacerade på flera servrar:

  • webbapp (react, vue, angular, linkstart, etc.)
  • apis vila (nodejs + expres, java, python, etc)
  • autentisering/auktorisering:oauth2-plattform/leverantör, identitets-/åtkomstplattformar, etc.

Om detta är ditt fall måste du dela upp din MERN-app i flera utplacerbara artefakter:webb, api och säkerhet.

Oauth2

Oavsett om du är orolig bara för inloggning eller hur du säkerställer autentisering och auktorisering för dina webbar, apis och kanske dina mobilappar, behöver du:OAUTH2

Du kan utveckla din egen säkerhetsplattform med hänsyn till (1*), (2*), (3*) y (4*) eller använda något som:

  • auth0
  • keycloack, etc

Mer information här:https://stackoverflow.com/a/62049409

Dina frågor

  • vilken metod tycker du är bättre?
    • Jag tror att om du använder auth0 kommer du att spara tid och ansträngning. Med auth0 behöver du bara en enkel expressapp, med vissa slutpunkter som /login, /callback, etc. Eller om du använder auth0 + passport.js, hanteras dessa slutpunkter av passport.js
    • Jag råder dig att granska hur OAUTH2-flödet fungerar innan du använder auth0 med/utan pass. Denna länk hjälpte mig mycket.
  • Vad är skillnaden mellan 2 och 3,
    • Som jag läste, erbjuder auth0 och andra plattformar en användarhanteringstjänst eller så kan den ansluta till din användartjänst (AD/LDAP, databas, api, etc). Så
  • Finns det något sätt att implementera regler i pass (t.ex. omdirigera nya användare vid första inloggning)
    • Ja. Du kan lägga till lite logik när återuppringning omdirigeras i dina nodejs med eller utan pass.
  • Om jag implementerar Passport med MongoDB och min databas har hundratals användare, hur kan jag hantera dem?
    • Nuförtiden stöder databasen många rader. Så försök att optimera eller övervaka din produktionsdatabas. Ett annat alternativ är att anlita en databasadministratör för att utföra dessa uppgifter.

Referenser




  1. Kan inte ta bort, rensa, avinstallera mongodb från debian

  2. Importera data till en MongoDB-instans

  3. Kan jag köra en rå MongoDB-fråga i node-mongodb-native drivrutin?

  4. Reguljärt uttryck Spring data mongodb repositories