Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Авторизация и права в микросервисах / 16 сообщений из 16, страница 1 из 1
22.02.2019, 12:02
    #39777834
spider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
Всем привет, при разработке системы, как хотелось бы, на микросервисах, возникло одно недопонимание.

Проблем особых нет, кроме авторизационного сервиса, точнее с множественным обращением к нему.

Например пользователь авторизировался, ему выдали JWT токен, но у каждого пользователя есть права. Для получения этих прав нужно каждый раз обращаться к авторизационному сервису...
Варианты решения:
1) Записать их в JWT токен, но при обновлении прав они применяется только после выдачи нового токена, что ни есть хорошо.
2) Общая БД, что не соответствует самой архитектуре микросервисов, да и есть сделать их как можно автономнее.
3) Каждый раз обращаться к авторизационному сервису, что ни есть хорошо при большом кол-ве запросов. Например отрисовка главного экрана приложения это обращение к 8 сервисам + взаимодейсвие между собой, и того на каждое соответствие нужно делать запрос.

Подскажите, как решить подобную проблему лучше всего? Либо почитать.
...
Рейтинг: 0 / 0
22.02.2019, 12:29
    #39777855
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider13,

а зачем тебе микросервисы?
...
Рейтинг: 0 / 0
22.02.2019, 12:37
    #39777866
spider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
ViPRosspider13,

а зачем тебе микросервисы?

Начинается...
Я не хочу расписывать структуру всего проекта и рассказывать почему MSA подходит для данного проекта. Давай-те оффтоп не будем разводить.

Одной из идей сейчас появилось создание промежуточного шлюза, на который будет ложится функция идентификации пользователя и прав. А после пробрасывать во внутрь уже полученные данные вместо токена.
...
Рейтинг: 0 / 0
22.02.2019, 13:40
    #39777901
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider13Подскажите, как решить подобную проблему лучше всего? Либо почитать.

Да тут на что фантазии хватит. Можно, например, кешировать права на уровне пода микросервисов.
...
Рейтинг: 0 / 0
22.02.2019, 14:02
    #39777916
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider132) Общая БД, что не соответствует самой архитектуре микросервисов, да и есть сделать их как можно автономнее.

Общая БД имеет право на существование. Рассмотрите 3 варианта CAP по Эрику Брюверу.

P.S. Глобальный DNS как-то существует и вполне себе работает. Поинтересуйтесь как.
...
Рейтинг: 0 / 0
22.02.2019, 15:22
    #39778008
scf
scf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
Только вариант 3.

Доработать авторизационный сервис, чтобы он держал больше кол-во запросов. Например, добавив к нему распределенный in-memory кеш или быструю базу данных.

Либо - короткоживущий кеш на стороне клиента. Например, если сделать кеш с expiration 1 секунда, то мы получаем ограничение нагрузки на авторизационный сервер до 1 запрос/секунда/токен и односекундный eventual consistency
...
Рейтинг: 0 / 0
22.02.2019, 16:43
    #39778059
spider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
scf,

Кеш на стороне сервиса не совсем хорошо, так как нужен expiration, т.е. при изменении прав они будут применены не сразу.
Нагрузку он выдержит, но насколько это корректно.
Но на этапе проектирования хотелось бы избавится от подобных проблем.

mayton,

Хорошо, спасибо за совет.
...
Рейтинг: 0 / 0
22.02.2019, 16:59
    #39778073
OoCc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider133) Каждый раз обращаться к авторизационному сервису, что ни есть хорошо при большом кол-ве запросов. Например отрисовка главного экрана приложения это обращение к 8 сервисам + взаимодейсвие между собой, и того на каждое соответствие нужно делать запрос.

Не проблема. WS-Policy и WS-PolicyAttachment хранятся как файлы. каждый раз микросервис при попытке загрузки получит ответ 304 Not Modified.
...
Рейтинг: 0 / 0
22.02.2019, 17:02
    #39778077
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider13Кеш на стороне сервиса не совсем хорошо, так как нужен expiration, т.е. при изменении прав они будут применены не сразу.
Можешь использовать классику: на стороне авторизационного сервиса задействовать memcached, в случае изменения прав пользователя - удалять его из кэша.
Так снизишь нагрузку на БД, но количество запросов не уменьшишь. Если это критично - вводи адекватный expiration, которого хватит хотя бы на отрисовку одной формы.

А права все равно будут применены не сразу, для передачи команды на изменение прав и само изменение потребуется 0.01-0.1 сек., поэтому мгновенная реакция невозможна, как следствие можно безболезненно чуть растянуть период, применив кэширование на 1-2 секунды, как было предложено.
...
Рейтинг: 0 / 0
22.02.2019, 17:07
    #39778081
spider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
Dima Tspider13Кеш на стороне сервиса не совсем хорошо, так как нужен expiration, т.е. при изменении прав они будут применены не сразу.
Можешь использовать классику: на стороне авторизационного сервиса задействовать memcached, в случае изменения прав пользователя - удалять его из кэша.
Так снизишь нагрузку на БД, но количество запросов не уменьшишь. Если это критично - вводи адекватный expiration, которого хватит хотя бы на отрисовку одной формы.

А права все равно будут применены не сразу, для передачи команды на изменение прав и само изменение потребуется 0.01-0.1 сек., поэтому мгновенная реакция невозможна, как следствие можно безболезненно чуть растянуть период, применив кэширование на 1-2 секунды, как было предложено.

Думал о таком варианте, спасибо.
Видимо сколько людей, столько и решений будет.

Все таки решил остановится на варианте промежуточного сервиса между nignx и микросервисами, который будет разворачивать
...
Рейтинг: 0 / 0
23.02.2019, 10:58
    #39778215
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider13а зачем тебе микросервисы?

Начинается...
Твой геморой с выбором решения (особенно желание во что бы то ни стало иметь кучу БД) показывает, начинаются проблемы из-за незнания ответа на поставленный вопрос.

Дробить по тупому не надо. Надо вменяемо проектировать на монолитном уровне, а потом, если реально возникнет потребность (которую ты ни разу пока не увидел, не понял и не осознал), вменяемое проектирование позволит безболезненно выделить взаимодействующие через декларативную обёртку сервисы.

Хотя для поощрения маразма тех, кто это всё придумал, я бы предложил делать по БД на каждую таблицу. Типа БД с таблицей "Справочник стран". А взаимодействие организовывать через сервис объединения данных, которому на вход пойдёт супер-мега-новый язык запросов, затем мега-парсер всё поймёт, оптимизирует, составит наилучший план обзвона всех БД, сджойнит результаты и отдаст ещё одному супер сервису - сервису отдач результата. И на каждом шаге внутри процесса, конечно же, нужна авторизация! Без неё никак, хакеры сегодня злые, потому что.
...
Рейтинг: 0 / 0
23.02.2019, 11:48
    #39778222
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
alex55555spider13пропущено...


Начинается...
Твой геморой с выбором решения (особенно желание во что бы то ни стало иметь кучу БД) показывает, начинаются проблемы из-за незнания ответа на поставленный вопрос.

Дробить по тупому не надо. Надо вменяемо проектировать на монолитном уровне, а потом, если реально возникнет потребность (которую ты ни разу пока не увидел, не понял и не осознал), вменяемое проектирование позволит безболезненно выделить взаимодействующие через декларативную обёртку сервисы.

Хотя для поощрения маразма тех, кто это всё придумал, я бы предложил делать по БД на каждую таблицу. Типа БД с таблицей "Справочник стран". А взаимодействие организовывать через сервис объединения данных, которому на вход пойдёт супер-мега-новый язык запросов, затем мега-парсер всё поймёт, оптимизирует, составит наилучший план обзвона всех БД, сджойнит результаты и отдаст ещё одному супер сервису - сервису отдач результата. И на каждом шаге внутри процесса, конечно же, нужна авторизация! Без неё никак, хакеры сегодня злые, потому что.
Это же GraphQL Schema Stitching
...
Рейтинг: 0 / 0
23.02.2019, 13:32
    #39778241
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider13...Подскажите, как решить...

на мой взгляд есть два варианта:
1) либо идёт каждый раз запрос прав (когда мы знаем глагол выполнения и агентов)
2) зная глагол выполнения и агентов - обогащать данные запроса необходимой секьюрностью(пересечение агентов взаимодействия и самого глагола).

С точки зрения проблемы распространения прав на всю систему - думаю этим можно пренебречь, тем более если источником изменений является человек.
Или по другому - при изменение прав, администратор, полагается на изменение прав(как факта), а не на дробления текущего потока выполнения на две кучки - до и после правки.

(круглый)
...
Рейтинг: 0 / 0
24.02.2019, 23:32
    #39778575
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider131) Записать их в JWT токен, но при обновлении прав они применяется только после выдачи нового токена , что ни есть хорошо.

Это как раз очень и очень хорошо .

И я не понимаю, как вообще можно относится к этому иначе. Даже если права не передаются в токене, сам факт авторизации -- это точка входа, пункт контроля, на котором пользователю выдаются его роли, полномочия, и т.д. и т.п. Нельзя, нельзя, менять их "на лету".

spider132) Общая БД, что не соответствует самой архитектуре микросервисов, да и есть сделать их как можно автономнее.

Сервис авторизации и есть тот самый "БД". Ходите в него за полным набором прав, если не хотите пихать их в токен, чтобы он не разбухал.


spider133) Каждый раз обращаться к авторизационному сервису, что ни есть хорошо при большом кол-ве запросов. Например отрисовка главного экрана приложения это обращение к 8 сервисам + взаимодейсвие между собой, и того на каждое соответствие нужно делать запрос.

Не каждый раз, а во время этапа авторизации. Один раз. Потом, кешируете. Ищите компромисс, однозначной пилюли для вас нет и не будет.
...
Рейтинг: 0 / 0
26.02.2019, 03:50
    #39779086
Lessyp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider133) Каждый раз обращаться к авторизационному сервису, что ни есть хорошо при большом кол-ве запросов. Например отрисовка главного экрана приложения это обращение к 8 сервисам + взаимодейсвие между собой, и того на каждое соответствие нужно делать запрос.

вообще-то микросервисы в любом случае будут обращатся к авторизационному сервису т.к. именно там лежат public keys для проверки подписи токена
...
Рейтинг: 0 / 0
27.02.2019, 09:42
    #39779610
MirnyiAtom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация и права в микросервисах
spider131) Записать их в JWT токен, но при обновлении прав они применяется только после выдачи нового токена, что ни есть хорошо.

И каждый раз перед применение проверять токен на валидность
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Авторизация и права в микросервисах / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]