Я изучаю базовую сервис-ориентированную архитектуру, и мне интересно, как лучше всего обрабатывать аутентификацию пользователей во всех службах.Централизованная аутентификация в сервис-ориентированной архитектуре
В качестве простого примера предположим, что у нас есть приложение блога, который взывает к двум другим услугам:
- Служба пользователя/аутентификации для хранения пользовательских данных и обмена учетных данных для доступа лексем
- служба сообщений для управления данными о постах
Предположим, пользователь приложения пытается удалить конкретное сообщение и разрешено только пользователям с ролью «admin».
Следующие запросы должны быть сделаны:
приложение -> Auth
Аутентифицировать текущий пользователь (с помощью какого-то знака). Если маркер истек приложение может перенаправить пользователя на форму входа в систему и т.д.
приложение -> сообщений
Удалить пост.
сообщений -> Auth
Перед тем, как сообщение удаляется, почтовый сервис должен убедиться, что запрашивающий пользователь имеет разрешение сделать это. Аутентификация текущего пользователя (через токен) и убедитесь, что у них есть роль «admin».
Это слишком простой пример, но мне любопытно, как люди работают с auth во всех своих сервисах. Кажется вероятным, что для авторизации запроса каждой службе потребуется отдельный вызов службы аутентификации. Это так? Есть ли более эффективные способы обработки auth в этом виде SOA?
Спасибо!
Вы предлагаете, чтобы сам токен включал роли пользователя? – scttnlsn
Все зависит от ваших требований безопасности. если для срока действия токена вы можете жить без обработки отзыва авторизации, вы можете его использовать. В тех случаях, когда вы не можете позволить себе, что вам нужно авторизоваться по каждому запросу. Обратите внимание, что если поставщик идентификации и службы, которые его используют, развернуты на тех же серверах, накладные расходы могут быть разумными. например агент политики в OpenAM https://wikis.forgerock.org/confluence/display/openam/Authentication+and+Authorization+Overview –
Полезно знать ... спасибо! – scttnlsn