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
- https://www.digitalocean.com/ społeczność/tutoriale/wprowadzenie-do-oauth-2
- https://auth0.com/user-management
- https://stackoverflow.com/a/62049409
- https://fiware-tutorials.readthedocs. io/pl/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/
- Zarządzanie jednokrotnym logowaniem przy użyciu paszportjs dla własnych aplikacji internetowych - udostępnianie loginu
- https://aws.amazon.com/blogs/apn/how-to-integrate-rest-apis-with-single-page-apps-and-secure-them - using-auth0-part-1/
- Zabezpieczenie Facebook OAuth przy użyciu paszportu-facebook
- Asynchroniczne informacje o Django, Ajax, Jquery
- modele relacyjne