Мне сложно выбрать подходящую/безопасную стратегию аутентификации для архитектуры микросервиса. Единственная публикация SO, которую я нашел на эту тему, - это: Единый вход в архитектуру Microservice
Моя идея состоит в том, чтобы иметь в каждой службе (например, аутентификацию, обмен сообщениями, уведомление, профиль и т.д.) уникальную ссылку на каждого пользователя (вполне логично, затем его user_id
) и возможность получить текущего пользователя id
если вы вошли в систему.
Из моих исследований я вижу две возможные стратегии:
1. Общая архитектура
В этой стратегии приложение аутентификации является одним из сервисов среди других. Но каждая служба должна иметь возможность сделать преобразование session_id
= > user_id
, поэтому оно должно быть мертвым простым. Вот почему я подумал о Redis, который сохранит ключ: значение session_id:user_id
.
2. Архитектура брандмауэра
В этой стратегии хранение сеанса не имеет особого значения, поскольку оно обрабатывается только приложением аутентификации. Затем user_id
может быть перенаправлен другим службам. Я подумал о Rails + Devise (+ Redis или mem-кэшированном хранилище файлов cookie и т.д.), Но есть множество возможностей. Единственное, что имеет значение, - это то, что службе X никогда не понадобится аутентифицировать пользователя.
Как эти два решения сравниваются в терминах:
- Безопасность
- робастности
- Масштабируемость
- простота использования
Или, может быть, вы предложите другое решение, о котором я здесь не упоминал?
Мне нравится решение # 1 лучше, но не нашли много реализаций по умолчанию, которые бы защитили меня в том, что я иду в правильном направлении.
Надеюсь, мой вопрос не закрыт. Я не знаю, где еще спросить.
Заранее спасибо