Стратегия аутентификации Microservice
Мне сложно выбрать подходящую/безопасную стратегию аутентификации для архитектуры микросервиса. Единственная публикация SO, которую я нашел на эту тему, - это: Единый вход в архитектуру Microservice
Моя идея состоит в том, чтобы иметь в каждой службе (например, аутентификацию, обмен сообщениями, уведомление, профиль и т.д.) уникальную ссылку на каждого пользователя (вполне логично, затем его user_id
) и возможность получить текущего пользователя id
если вы вошли в систему.
Из моих исследований я вижу две возможные стратегии:
1. Общая архитектура
![Shared architecture]()
В этой стратегии приложение аутентификации является одним из сервисов среди других. Но каждая служба должна иметь возможность сделать преобразование session_id
= > user_id
, поэтому оно должно быть мертвым простым. Вот почему я подумал о Redis, который сохранит ключ: значение session_id:user_id
.
2. Архитектура брандмауэра
![Firewall architecture]()
В этой стратегии хранение сеанса не имеет особого значения, поскольку оно обрабатывается только приложением аутентификации. Затем user_id
может быть перенаправлен другим службам. Я подумал о Rails + Devise (+ Redis или mem-кэшированном хранилище файлов cookie и т.д.), Но есть множество возможностей. Единственное, что имеет значение, - это то, что службе X никогда не понадобится аутентифицировать пользователя.
Как эти два решения сравниваются в терминах:
- Безопасность
- робастности
- Масштабируемость
- простота использования
Или, может быть, вы предложите другое решение, о котором я здесь не упоминал?
Мне нравится решение # 1 лучше, но не нашли много реализаций по умолчанию, которые бы защитили меня в том, что я иду в правильном направлении.
Надеюсь, мой вопрос не закрыт. Я не знаю, где еще спросить.
Заранее спасибо
Ответы
Ответ 1
Основываясь на том, что я понимаю, хороший способ его решить - использовать протокол OAuth 2 (вы можете найти немного больше информации об этом на http://oauth.net/2/)
Когда ваш пользователь войдет в ваше приложение, он получит токен, и с этим маркером они смогут отправлять другие службы, чтобы идентифицировать их в запросе.
![OAuth 2 Model]()
Пример проектирования цепных микросервисов
![Architecture Model]()
Ресурсы
Ответ 2
вы можете использовать idenitty server 4 для целей аутентификации и авторизации
вы должны использовать Архитектуру брандмауэра, поэтому у вас больше возможностей управления , надежностью, масштабируемостью и простотой использования