170 похожих чатов

Коллеги, не подскажите про авторизацию и аутентификацию в микросервисном мире.

У нас сложная ролевая структура, связанная с организационной структурой, которая должна ещё автоматически обновляться. Я так понимаю, что чаще всего управление пользователями м ролями отдается на откуп какому-то готовому authentication server, который поддерживает OAuth. А что делать в случае, если не хватит интеграции например с Active directory, которую предоставляет auth server? Неужели писать свой/допиливать? В микросервисах планируется и простая ролевая модель и ещё ACL в некоторых местах. Использовать стороннюю авторизацию не планируем.

30 ответов

14 просмотров

Ну если готовой нет, то в чем проблема не делать кастомную? В распределенных системах часто делают как: Клиент заправшивает у AuthServer разрешение. Например хочу поменять ЗП Васи вот мои куки. Сервер подписывает разрешение условно на 30 сек. Далее идем уже на ресурс сервер, он проверяет подпись и разрешает действие.

Владислав-Хакин Автор вопроса
Владимир Наваев
Ну если готовой нет, то в чем проблема не делать к...

Не понял фразу -"в чем проблема не делать кастомную"

Вообще у спринга есть роли и ACL.

Владислав-Хакин Автор вопроса
Владимир Наваев
Вообще у спринга есть роли и ACL.

Это да, безусловно. Вопрос в том, как допатчить auth server и нужно ли. Может как-то по-другому делают

Владислав-Хакин Автор вопроса
Владислав Хакин
Это да, безусловно. Вопрос в том, как допатчить au...

Ну свой OAuth сервер реализовать правильно - задача не из тривиальных

Посмотрите в сторону keycloak. Скорее он вам подойдет.

Владислав-Хакин Автор вопроса
Mark Andreev
Посмотрите в сторону keycloak. Скорее он вам подой...

Да, сейчас смотрю, спасибо. А вообще правильно ли использовать роли возвращаемые в токене от auth server?

Владислав Хакин
Да, сейчас смотрю, спасибо. А вообще правильно ли ...

От кейса зависит. Вообще по идее auth server уже должен знать дает он разрешение на какое то действие или нет. Зачем еще раз проверять?

Владислав Хакин
Да, сейчас смотрю, спасибо. А вообще правильно ли ...

Замечу, что часть данных можно положить в JWT токен, а часть получить от keycloak напрямую бэкендом. Ответ будет зависеть от того, боимся ли мы раскрывать роли и хотим ли мы пожертвовать этим ради скорости.

Mark Andreev
Замечу, что часть данных можно положить в JWT токе...

Тогда нарушается вся суть того, что мы делает это все распределенным. Это будут обычные стейтфул сессии

Владислав-Хакин Автор вопроса
Владимир Наваев
От кейса зависит. Вообще по идее auth server уже д...

Это звучит странно, он должен знать права для каждого действия? Я думал он может максимум выдать роли которые есть у пользователя

Владислав Хакин
Это звучит странно, он должен знать права для кажд...

Ну в этом есть суть микросервисов. Мы делим отвественность. Auth server отвечает за выдачу разрешений на действия. Те занимается аутентификацией, авторизацией

Владислав-Хакин Автор вопроса
Владимир Наваев
Ну в этом есть суть микросервисов. Мы делим отвест...

Вот это будет тяжело. Проверка acl может быть специфична для каждого сервиса и зависеть от его домена. Такой в auth server собирать странно

Владислав-Хакин Автор вопроса
Владимир Наваев
А оно нужно вообще? Ради чего делаете?

ACL? Да, грубо говоря доступ до объекта, зависит от того, присутствует ли пользователь в группе допустимых, что может зависеть от организационной структуры в том числе

Владислав Хакин
Вот это будет тяжело. Проверка acl может быть спец...

Ну вот пример. Можно по-разному на самом деле. Создаем нового сотрудника. Получаем разрешение у auth сервера на создаение. Тк мы админы - он нам его дает. Далее делаем запрос добавления этого ресурса в auth acl с нужными разрешениями. Далее делаем запрос создания самого сотрудника в ресурс сервере.

Владислав-Хакин Автор вопроса
Владимир Наваев
Не, я про auth server

рассматриваю общепринятый подход по поводу организации с отдельным сервисом + OAuth jwt в микросервисной архитектуре) Аутентификация то уж точно у всех сервисов будет одинаковая, дублировать в каждом микросервисе мне кажется излишне

Владислав-Хакин Автор вопроса
Владимир Наваев
Ну вот пример. Можно по-разному на самом деле. Соз...

идею понял, почитаю, что может keycloack с acl, спасибо. А что делать со своей структурой хранения текущей? Переходить и использовать keycloack например? А для динамического обновления по интеграции все на модель keycloack завязывать получается?

Владислав Хакин
рассматриваю общепринятый подход по поводу организ...

Просто это может быть как купить огромный бульдозер, чтобы копать грядки на участке

Владислав-Хакин Автор вопроса
Владимир Наваев
Просто это может быть как купить огромный бульдозе...

а как решить задачу аутентификации тогда по-другому? распределенный persistent storage сессий? В каждом микросервисе при каждом запросе аутентифицировать пользователя?

Владислав Хакин
а как решить задачу аутентификации тогда по-другом...

Вы хотите масштбироваться? Это можно делать в рамках монолита. keycloak особо не юзал, там можно да https://www.keycloak.org/docs/latest/authorization_services/#_service_protection_api

Владислав-Хакин Автор вопроса
Владимир Наваев
Вы хотите масштбироваться? Это можно делать в рамк...

мы планируем разделяться из монолита и сейчас продумываем как инфраструктурные задачи реализовать

Владислав Хакин
а как решить задачу аутентификации тогда по-другом...

Да по сути можно банально обращаться к общему стораджу сессий

Владислав Хакин
мы планируем разделяться из монолита и сейчас прод...

Просто мне кажется важным понимать зачем. От этого можно разные решение придумывать. Распределенные штуки обычно очень сложные, а значит дороги в разработки.

Владислав-Хакин Автор вопроса
Владимир Наваев
Просто мне кажется важным понимать зачем. От этого...

вопрос не в этом, а в том, как это лучше сделать авторизацию и аутентификацию с учетом требований и понять ограничения и что придется менять)

Владислав Хакин
вопрос не в этом, а в том, как это лучше сделать а...

На самом деле без конкретного кейса и примеров тут так не посоветуешь

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта