D
я просто не до конца понимаю как это работает
D
я делал авторизацию свою раньше
D
тут всё понятно - создаешь пользователя сохраняаешь в базу
Dmitry
Ну так тебе пришел токен, по которому ты можешь получить почту юзера или просто использовать его Твиттер ид
D
потом при логине сверяешь пароли если совпал берешь этого юзера
Ale
Это абсолютно не имеет к микросервисам отношения, это что то другое, про что я никогда не слышал
смотри про что я: каждый микросервис это свой модуль, его связь(каплинг) с остальными должен быть минимален, иначе вообще нафига он нужен. Во вторых он должен сам мочь провести транзакцию, при этом синхронно с точки зрения клиента. У него могут быть какие-то побочки, которые выполнятся в будущем, обычно как раз через другие сервисы. В идеале микросервис это свой bounded context, в рамках которого живут связанные агрегаты, которые и являются границами транзакции
D
т.е. как мне например сохранять записи в базе ассоциированные с этим юзером
Vladimir
Да, но все это в рамках бэкэнда
D
мне все равно нужно в своей таблице юзеров создать для него запись
Vladimir
Все обращаения клиента имеют повышенные требования к авторизации, валидации, и т д
Ale
Да, но все это в рамках бэкэнда
ну так необязательно же
D
правильно?
Vladimir
Обязательно
Dmitry
Ale
не могу понять почему тогда
D
как вы пришли к микросервисам вообще? У меня реальная проблема здесь)
Dmitry
А ты уже сверяешь твиттерид с тем что у тебя в бд и понимаешь кто залогинелся
Vladimir
В первую очередь потому, что это естественный этап в развитии кода
Ale
как вы пришли к микросервисам вообще? У меня реальная проблема здесь)
суббота, какая разница что обсуждать, а с умными людьми-то
Vladimir
А переход к тому что ты описываешь не имеет никакого профита
Ale
ты про jwt или границы транзакций?)
Dmitry
мне все равно нужно в своей таблице юзеров создать для него запись
Можно запросить у твиттера почту юзера и сохранять по почте
D
А ты уже сверяешь твиттерид с тем что у тебя в бд и понимаешь кто залогинелся
сорри за тупые вопросы, но я не совсем представляю себе весь процесс
Ale
хз, я знаю приложения, где это успешно прижилось, клиент вообще при этом не трогали, ему все равно какие токены гонять
Dmitry
Загугли OAuth 2
Ale
и я бы не назвал это усложнением
Vladimir
В например у меня юзеры существуют в только в рамках api
Vladimir
В микросервисах их вообще нет
Ale
постепенно чуваки от монолита хорошенько отпиливали куски, которые надо было резко скейлить
Vladimir
Никакой авторизации, ничего
Vladimir
Это просто кусок кода, который что делает, не важно для кого и почему
Ale
ну у тебя получается есть центральная точка отказа
Vladimir
Более того, достаточно важно что два разных микросервиса не должны работать с одними и теми же данными
Ale
сервис авторизации
Ale
ну тогда я опять не понял(
Vladimir
API gateway полностью stateless
Vladimir
Их столько, сколько хочется
Ale
так а как он авторизирует?
Ale
jwt?))))
D
Загугли OAuth 2
гугл выдает подробности по тому как это внутри работает. Мне это в общем-то не надо знать, потому что за меня эту низкоровневую задачу делает либа (grant)
Vladimir
так а как он авторизирует?
Берет токен из запроса и идет в БД
Andrey
ахахах, низкоуровневый OAuth 2
Andrey
))))
D
меня интересует что мне делать когда я уже авторизовался
Ale
Берет токен из запроса и идет в БД
ну чет не очень стейтлес
Vladimir
Ну БД не стейтлесс, да
Vladimir
Было бы странно если бы БД была стейтлесс
Ale
ну я понял твой подход, но тогда если у нас резко растет нагрузка на сервис доставки груза, то нам вместе с ним надо скейлить авторизацию
Ale
или еще че
Ale
ну т.е. фронт, который чуть сложнее, чем прокся
Vladimir
Растет только нагрузка на базу
Ale
это бывает неудобно
Vladimir
Она растет всегда и в любом случае
Vladimir
Это элементрано решается кэшированием
Ale
в случае микросервисов у тебя под каждый сервис своя база
Vladimir
Так и есть, условно
Ale
ну или что-то изолированное
Ale
как это организованно - деталь реализации
Ale
но ты можешь их скейлить вместе, грубо говоря
Ale
а тут надо еще скейлить всегда "центральный сервис"
Ale
это часто не проблема, но бывает проблема
Ale
тогда и нужен jwt
Vladimir
jwt это трэш
Vladimir
Неоднократно поднимался вопрос
Vladimir
Оно убивает безопасность
Ale
тогда и нужен jwt
или другой стейтлес-токен
Ale
Оно убивает безопасность
ну понятно, что у тебя рефреш токены стейтфул будут
Ale
а стейтлес на короткий срок
Vladimir
Это делает авторизацию слишком сложной на клиентской стороне
Ale
вопрос в том, чтобы экономить в 95% запросах время на хождение за инфой сессии куда-либо
Vladimir
Более того, использование кук является критичным для безопасности
Ale
Это делает авторизацию слишком сложной на клиентской стороне
так опять же, вопрос экономики, если на клиенте это решать в итоге дешевле, то так и надо делать
Ale
такие случаев КРАЙНЕ мало
Ale
но они есть
D
просто может кто-то пояснить чем отличается флоу когда у меня табличка с юзерами и я их сам аутентифицирую по своей базе данных, от делегированной аутентификации?
Vladimir
Строить такую систему дороже
Vladimir
При этом можно наделать катастрофических ошибок