Как правильно организовать архитектуру веб-приложения?
Занимаюсь разработкой веб-приложения.
Архитектура:
* Клиент Angular
* Статический веб сервер для передачи клиентской части (node, express)
* API (node, express, mongodb)
Возникают следующие вопросы:
* Планирую делать два API.
Первый для осуществления аутентификации. Какой протокол использовать? Чтобы в будущем легко было добавить стороннюю аутентификацию к примеру от ВК и Google
Второй для доступа к ресурсам (по закрытым, открытым маршрутам)
* Как хранить пользователя в бд при сторонней аутентификации?
Если локальная, то понятно, что в схеме будет логин, пароль, почта и тд.
А если происходит сторонняя аутентификация?
Что хранить? какая будет схема?
Хранить так же - то что вы хотите.
Просто вы локальную запись будете связывать с удаленной - например по email, или по каким-то ID если есть такая инфа.
Для авторизации сразу возьмите библиотеку которая это все может поддержать, вроде passportjs неплох. Протокол вы будете использовать тот который предоставляет сторонний сервис - и возможно их будет несколько разных. Стандарт для таких дел - OAuth.
Нужда отдельного API для авторизации весьма сомнительная - что именно он будет делать? Токены выдавать будут все равно сторонние сервера, проверять их вы будете при доступе к ресурсам.
Robur
Спасибо за ответ. Теперь некоторые вопросы отпали.
Мне порекомендовали рассмотреть сервис Auth0. Я в нем попробовал разобраться, много сторонних провайдеров, но вовремя аутентификации (даже локальной) пользователя будет перенаправлять на их сервис. Изменить верстку их формы можно, но такой редирект меня бы оттолкнул, как пользователя.
Passport.js посмотрел, хорошая документация, огромное количество сторонних провайдеров. Буду его обязательно использовать.
По поводу схемы:
local { email, login, password }, google { email, id, token ... }. Пользователь прошел аутентификацию через учетную запись google, при добавлении нового пользователя в бд, продублировать полученный email в локальную учетную запись, а после дать возможность пользователю в настройках профиля добавить пароль?
Я в нем попробовал разобраться, много сторонних провайдеров, но вовремя аутентификации (даже локальной) пользователя будет перенаправлять на их сервис
Это обычная схема - никогда не обращали внимание что при аутентификации через гугл/фейсбук/etc вас тоже куда-то редиректит?
Именно за этим Auth0 и используют - чтобы все происходило у них и на их серверах, а вам ничего не надо было делать :)
Пользователь прошел аутентификацию через учетную запись google, при добавлении нового пользователя в бд, продублировать полученный email в локальную учетную запись, а после дать возможность пользователю в настройках профиля добавить пароль?
Можно и так, вариантов масса - как вам удобнее будет так и делайте.
По клиентской части
У меня есть стартовая страница (для гостей) ограниченный функционал, в основном ознакомление с проектом и просмотр различных предложений.
Есть главная для пользователей прошедших аутентификацию, там полный функционал, приватная часть клиента.
Есть страница для администратора и работников приложения, там происходит управление веб приложение, статистика и так далее.
Ключевой вопрос:
Все эти три разные страницы реализовывать в одном проекте Angular?
Я дипломник без опыта работы, маленький город, спросить ни у кого не могу)
Disco Disco, Если функционал вообще никак не пересекается кроме авторизации, то лучше два или три отдельных приложения. Просто удобнее будет код поддерживать.
Но можно и одно сделать с разными разделами.
Город у вас может и маленький, но интернет у вас весь доступен (пока еще) :)
А что за город?
Еще вопрос у меня в бд должны будут храниться персональные данные пользователей, согласно требованиям Роскомнадзора, я не могу хранить эти данные на серверах за пределами территории России. Получается нужно будет арендовать VPS на сервисе, сервера, которого физически находятся на территории РФ. Вы можете посоветовать, какое нибудь решение достойное?
Раньше я думал арендовать пару ubuntu серверов на сервисе digitalocean, поставить туда необходимое ПО, все проблемы решились один махом. Но теперь...
Я не занимаюсь персональными данными не в курсе что нужно сделать чтобы удовлетворить роспотребназдор. Хостинги есть и в россии, где можно арендовать VPS, по крайне мере раньше точно были.
и еще вопрос согласно, какому ГОСТу принято описывать техническое задание на разработку веб приложения?
Понятия не имею. Мне кажется по госту это только если вы с госслужбами какими-то работаете и по шею в бюрократии. А если вы с ними работаете - хорошо подумайте, нужно ли вам это? :)
Просто примеров грамотного ТЗ я думаю можно найти если поискать. Этим обычно занимаются агенства которые делают решения "под ключ"
Disco Stu, Тогда они должны знать и дать номер госта, иначе как они проверять будет соответствие? Или вам самому надо гост найти и по нему сделать?
Тогда можете поступить как производители сгущенки - берете любой гост хоть каким-то боком относящийся к тому что вы делаете, и приводите в соответствие ему. Например гост на отступы в документах какой-нибудь :)