Стратегия аутентификации 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 для целей аутентификации и авторизации

вы должны использовать Архитектуру брандмауэра, поэтому у вас больше возможностей управления , надежностью, масштабируемостью и простотой использования