sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvad er den bedste måde at godkende og godkende en web- og api-løsning som MERN Stack?

Den bedste godkendelsesstrategi afhænger af omfanget af dine applikationer på kort eller lang sigt.

Monolitisk eller simpelt web med privat login

For eksempel, hvis du kun vil have et simpelt (MERN) web med en enkelt backend (api rest) eller en monolitisk applikation som denne mern-eksempel med et internt eller privat login i din organisation kan din autorisationsstrategi være så simpel som:

  • (1*) /login ekspresrute, som modtager bruger/adgangskode, validerer dem i databasen og returnerer det klassiske jwt-token og en række muligheder (reagerruter), som brugeren skal have adgang til
  • webapp (react) skal gengive sider, hvis ruter matcher de modtagne ruter
  • webapp skal sende det modtagne token til enhver API-rest-endepunkt-påkaldelse
  • når api modtager invokationen fra react web, skal validere eksistensen af ​​token som en header. Hvis den ikke findes, skal du returnere en 403-fejl.
  • (2*) Hvis token findes, skal du prøve at validere det (veludformet, ikke udløbet, korrekt signatur osv.).
  • (3*)Hvis det er et gyldigt token, skal du udføre en sidste validering:Har brugeren med rollen "gæst" lov til at udføre en DELETE til et slutpunkt /user/100 .
  • (4*) Klassisk løsning er at have nogle tabeller i din database som:bruger, roller, bruger_roller, rolle_tilladelse, tilladelse_option. Optionstabel skal have registreret alle dine api-endepunkter og dens metode. Dette kunne også bruges til at skabe relationen mellem bruger <:> web-ruter. Tjek dette

Moderne krav

Moderne og store organisationer kræver:

  • Login til sociale netværk
  • Interne/eksterne brugere
  • Ikke interaktive logins (robotter, planlæggere osv.)
  • Flere webapps
  • Flere mobilapps
  • En masse Api Rest

I dette tilfælde er MERN-appen ikke et godt valg, fordi den er ALT-I-ET. Fælles strategi til at implementere de tidligere krav er at have flere artefakter installeret på flere servere:

  • webapp (react, vue, angular, linkstart osv.)
  • apis hvile (nodejs + expres, java, python osv.)
  • godkendelse/godkendelse:oauth2 platform/udbyder, identitets-/adgangsplatforme osv.

Hvis dette er dit tilfælde, skal du opdele din MERN-app i flere implementerbare artefakter:web, api og sikkerhed.

Oauth2

Ligegyldigt om du kun bekymrer dig om login eller hvordan du sikrer godkendelsen og godkendelsen af ​​dine webs, API'er og måske dine mobilapps, skal du bruge:OAUTH2

Du kan udvikle din egen sikkerhedsplatform under hensyntagen til (1*), (2*), (3*) y (4*) eller bruge noget som:

  • auth0
  • keycloack osv.

Flere detaljer her:https://stackoverflow.com/a/62049409

Dine spørgsmål

  • hvilken metode synes du er bedre?
    • Jeg tror, ​​at hvis du vil bruge auth0, vil du spare tid og kræfter. Med auth0 har du bare brug for en simpel ekspres-app, med nogle endepunkter som /login, /callback osv. Eller hvis du bruger auth0 + passport.js, administreres disse endepunkter af passport.js
    • Jeg råder dig til at gennemgå, hvordan OAUTH2-flow fungerer, før du bruger auth0 med/uden pas. Dette link hjalp mig meget.
  • Hvad er forskellen mellem 2 og 3,
    • Som jeg læser, tilbyder auth0 og andre platforme en brugeradministrationstjeneste, eller den kan oprette forbindelse til din brugertjeneste (AD/LDAP, database, api osv.). Så
  • Er der en måde at implementere regler i passet (f.eks. omdirigere nye brugere ved første login)
    • Ja. Du kan tilføje noget logik, når tilbagekald omdirigeres i dine nodejs med eller uden pas.
  • Hvis jeg implementerer Passport med MongoDB, og min database har hundredvis af brugere, hvordan kan jeg så administrere dem?
    • I dag understøtter databasen mange rækker. Så for din produktionsdatabase, prøv at optimere eller overvåge den. En anden mulighed er at hyre en databaseadministrator til at udføre disse opgaver.

Referencer




  1. Oprettelse af en åben standard:Machine Learning Governance ved hjælp af Apache Atlas

  2. Kun udsætte bestemte felter, når du ser en bestemt vare med Spring Data?

  3. vælg distinkt mongodb C#

  4. FindAndUpdate Sådan kontrollerer du, om dokumentet virkelig blev opdateret