MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Кой е най-добрият начин за удостоверяване и оторизиране на уеб и api решение като MERN Stack?

Най-добрата стратегия за оторизация зависи от обхвата на вашите приложения в краткосрочен или дългосрочен план.

Монолитен или прост уеб с лично влизане

Например, ако ще имате само проста (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 и моята база данни има стотици потребители, как мога да ги управлявам?
    • В наши дни базата данни поддържа много редове. Така че за вашата производствена база данни опитайте да я оптимизирате или наблюдавате. Друг вариант е да наемете администратор на база данни, който да изпълнява тези задачи.

Препратки




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Неуспешна операция за деактивиране за модел MongoMapper, не може да се изтрие/премахне ключ от модела

  2. Анализирайте ефективността на заявка - mongoDB

  3. Spring Data Mongo не може да намери PersistentEntity за Enum

  4. Сравнете масиви и върнете разликата

  5. MongoDB:Как да получите отделен списък със стойности на полета на поддокумента?