Най-добрата стратегия за оторизация зависи от обхвата на вашите приложения в краткосрочен или дългосрочен план.
Монолитен или прост уеб с лично влизане
Например, ако ще имате само проста (MERN) мрежа с един прост бекенд (api rest) или монолитно приложение като това мерн пример с вътрешно или лично влизане във вашата организация, вашата стратегия за оторизация може да бъде толкова проста, колкото:
- (1*) /login експресен маршрут, който получава потребител/парола, валидира ги в база данни и връща класическия jwt токен и масив от опции (маршрути за реакция), до които потребителят трябва да има достъп
- уеб приложението (реагиране) трябва да визуализира страници, чиито маршрути съвпадат с получените маршрути
- уеб приложението трябва да изпрати полученото означение до всяко извикване на крайна точка за почивка на api
- когато API получи извикването от React Web, трябва да потвърди съществуването на токен като заглавка. Ако не съществува, трябва да върне грешка 403.
- (2*) Ако токенът съществува, трябва да се опита да го потвърди (добре оформен, без изтекъл срок, правилен подпис и т.н.).
- (3*)Ако това е валиден токен, трябва да извършите последна проверка:Има ли право на потребител с роля „гост“ да изпълни
DELETE
до крайна точка/user/100
. - (4*) Класическото решение е да имате някои таблици във вашата база данни като:потребител, роли, потребителски_роли, разрешение_за_роле, опция_разрешение. Таблицата с опции трябва да е регистрирала всички ваши крайни точки на API и нейния метод. Също така това може да се използва за създаване на връзка между потребителски <:> уеб маршрути. Проверете това
Съвременни изисквания
Съвременните и големи организации изискват:
- Вход в социалните мрежи
- Вътрешни/външни потребители
- Не интерактивни влизания (роботи, планировчици и т.н.)
- Няколко уеб приложения
- Няколко мобилни приложения
- Много Api Rest
В този случай приложението MERN не е добър избор, защото е ВСИЧКО В ЕДНО. Общата стратегия за прилагане на предишните изисквания е да има няколко артефакта, разположени в няколко сървъра:
- уеб приложение (react, vue, angular, linkstart и т.н.)
- apis rest (nodejs + expres, java, python и т.н.)
- удостоверяване/упълномощаване:платформа/доставчик oauth2, платформи за самоличност/достъп и др.
Ако това е вашият случай, трябва да разделите вашето MERN приложение на няколко артефакта за внедряване:уеб, api и сигурност.
Oauth2
Без значение дали се притеснявате само за влизане или как да осигурите удостоверяването и оторизацията за вашите мрежи, API и може би вашите мобилни приложения, ще ви трябва:OAUTH2
Можете да разработите своя собствена платформа за сигурност, като вземете предвид (1*), (2*), (3*) y (4*) или да използвате нещо като:
- auth0
- ключодържател и др.
Повече подробности тук:https://stackoverflow.com/a/62049409
Вашите въпроси
- кой метод смятате, че е по-добър?
- Мисля, че ако използвате auth0, ще спестите време и усилия. С auth0 ви трябва просто експресно приложение с някои крайни точки като /login, /callback и т.н. Или ако използвате auth0 + passport.js, тези крайни точки се управляват от passport.js
- Съветвам ви, прегледайте как работи потокът OAUTH2, преди да използвате auth0 с/без паспорт. Тази връзка ми помогна много.
- Каква е разликата между 2 и 3,
- Доколкото прочетох, auth0 и други платформи предлагат услуга за управление на потребители или могат да се свържат с вашата потребителска услуга (AD/LDAP, база данни, api и т.н.). Така че
- Има ли начин за прилагане на правила в паспорт (напр. пренасочване на нови потребители при първо влизане)
- Да. Можете да добавите малко логика, когато обратното извикване се пренасочва във вашите nodejs със или без паспорт.
- Ако внедря Passport с MongoDB и моята база данни има стотици потребители, как мога да ги управлявам?
- В наши дни базата данни поддържа много редове. Така че за вашата производствена база данни опитайте да я оптимизирате или наблюдавате. Друг вариант е да наемете администратор на база данни, който да изпълнява тези задачи.
Препратки
- https://www.digitalocean.com/ community/tutorials/an-introduction-to-oauth-2
- https://auth0.com/user-management
- https://stackoverflow.com/a/62049409
- https://fiware-tutorials.readthedocs. io/en/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/
- Управление на единично влизане при използване на passportjs за моите собствени уеб приложения - споделяне на вход
- https://aws.amazon.com/blogs/apn/how-to-integrate-rest-apis-with-single-page-apps-and-secure-them -using-auth0-part-1/
- Facebook OAuth сигурност чрез passport-facebook
- Асинхронна информация за Django, Ajax, Jquery
- релационни модели