MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jaki jest najlepszy sposób uwierzytelniania i autoryzacji rozwiązania internetowego i interfejsu API, takiego jak MERN Stack?

Najlepsza strategia autoryzacji zależy od zakresu Twoich aplikacji w krótkim lub długim okresie.

Monolityczna lub prosta sieć z prywatnym logowaniem

Na przykład, jeśli będziesz mieć tylko prostą (MERN) sieć z jednym prostym backendem (reszta API) lub monolityczną aplikację taką jak ta mern przykład z wewnętrznym lub prywatnym loginem w Twojej organizacji, Twoja strategia autoryzacji może być tak prosta, jak:

  • (1*) /login express route, która otrzymuje użytkownika/hasło, waliduje je w bazie danych i zwraca klasyczny token jwt oraz tablicę opcji (trasy reakcji), do których użytkownik powinien mieć dostęp
  • aplikacja internetowa (react) musi renderować strony, których trasy pasują do otrzymanych tras
  • aplikacja internetowa musi wysłać otrzymany token do dowolnego wywołania punktu końcowego spoczynku interfejsu API
  • gdy api otrzyma wywołanie z React web, musi zweryfikować istnienie tokena jako nagłówka. Jeśli nie istnieje, musi zwrócić błąd 403.
  • (2*) Jeśli token istnieje, należy spróbować go zweryfikować (poprawnie sformułowany, nie wygasły, poprawny podpis itp.).
  • (3*)Jeśli jest to prawidłowy token, musisz przeprowadzić ostatnią walidację:Czy użytkownik z rolą „gość” może wykonać DELETE do punktu końcowego /user/100 .
  • (4*) Klasycznym rozwiązaniem jest posiadanie w bazie danych kilku tabel, takich jak:user, role, user_roles, role_permission, permission_option. Tabela opcji musi mieć zarejestrowane wszystkie punkty końcowe interfejsu API i ich metodę. Można to również wykorzystać do stworzenia relacji między użytkownikami <:> trasami sieciowymi. Sprawdź to

Nowoczesne wymagania

Nowoczesne i duże organizacje wymagają:

  • Loginowanie w sieciach społecznościowych
  • Użytkownicy wewnętrzni/zewnętrzni
  • Nie interaktywne logowanie (roboty, programy planujące itp.)
  • Kilka aplikacji internetowych
  • Kilka aplikacji mobilnych
  • Dużo odpoczynku API

W tym przypadku aplikacja MERN nie jest dobrym wyborem, ponieważ jest WSZYSTKO W JEDNYM. Wspólną strategią implementacji poprzednich wymagań jest umieszczenie kilku artefaktów na kilku serwerach:

  • aplikacja internetowa (react, vue, angular, linkstart itp.)
  • odpoczynek apis (nodejs + expres, java, python itp.)
  • uwierzytelnianie/autoryzacja:platforma/dostawca oauth2, platformy tożsamości/dostępu itp.

W takim przypadku musisz podzielić swoją aplikację MERN na kilka możliwych do wdrożenia artefaktów:sieć, interfejs API i zabezpieczenia.

Oauth2

Bez względu na to, czy zależy Ci tylko na logowaniu, czy jak zapewnić uwierzytelnianie i autoryzację Twoich stron internetowych, interfejsów API i może aplikacji mobilnych, będziesz potrzebować:OAUTH2

Możesz stworzyć własną platformę bezpieczeństwa, biorąc pod uwagę (1*), (2*), (3*) y (4*) lub użyć czegoś takiego:

  • uwierz0
  • klucz itp.

Więcej szczegółów tutaj:https://stackoverflow.com/a/62049409

Twoje pytania

  • która metoda Twoim zdaniem jest lepsza?
    • Myślę, że jeśli użyjesz auth0, zaoszczędzisz czas i wysiłek. Z auth0 potrzebujesz tylko prostej aplikacji ekspresowej z niektórymi punktami końcowymi, takimi jak /login, /callback itp. Lub jeśli używasz auth0 + paszport.js, te punkty końcowe są zarządzane przez paszport.js
    • Radam, sprawdź, jak działa przepływ OAUTH2, zanim użyjesz auth0 z/bez paszportu. Ten link bardzo mi pomogło.
  • Jaka jest różnica między 2 a 3,
    • Jak czytałem, auth0 i inne platformy oferują usługę zarządzania użytkownikami lub mogą łączyć się z usługą użytkownika (AD/LDAP, baza danych, interfejs API itp.). Więc
  • Czy istnieje sposób na zaimplementowanie reguł w paszporcie (np. przekierowanie nowych użytkowników przy pierwszym logowaniu)
    • Tak. Możesz dodać trochę logiki, gdy wywołanie zwrotne jest przekierowywane w twoich nodejs z paszportem lub bez.
  • Jeśli zaimplementuję usługę Passport z MongoDB, a moja baza danych ma setki użytkowników, jak mogę nimi zarządzać?
    • Obecnie baza danych obsługuje wiele wierszy. Więc dla swojej produkcyjnej bazy danych spróbuj ją zoptymalizować lub monitorować. Inną opcją jest zatrudnienie administratora bazy danych do wykonania tych zadań.

Referencje




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Harmonogram zdarzeń (cronjob) w MongoDB?

  2. Parse server - Nie znaleziono pliku

  3. Długość identyfikatora kolekcji w MongoDB

  4. Spraw, aby Meteor reagował na określony element podrzędny Meteor.user()

  5. Jak śledzić żądania MongoDB z aplikacji konsolowej