Я новичок в SOA и поэтому экспериментирую.
В настоящее время самой большой проблемой для меня является аутентификация, мои текущие мысли об этом включают следующее:
Клиент отправляет какое-то сообщение аутентификации в службу аутентификации / пользователя, эта служба запрашивает базу данных, и если пользователь найден и пароль действителен, он ответит идентификатором сеанса, этот идентификатор будет использоваться во всех дальнейших запросах этот клиент.
Мне это кажется вполне нормальным, но я не знаю, как мне обрабатывать запросы к другим службам, я подумал о трех разных подходах.
Каждая служба запрашивает службу аутентификации, действителен ли сеанс, и если да, то в каких ролях находится пользователь. Служба аутентификации просматривает базу данных и отвечает соответствующим образом.
Служба аутентификации хранит всю информацию о сеансе в оперативной памяти и отвечает на запросы без обращения к БД.
Служба аутентификации отправляет авторизованное сообщение на esb, esb пересылает это авторизованное сообщение каждой службе, и эти службы кэшируют его. Никаких дополнительных запросов к службе аутентификации не потребуется. Если пользователь выходит из системы или его роли меняются, другое сообщение будет отправлено и обработано всеми службами.
Я думаю, что первый подход создает слишком большую нагрузку на службу аутентификации / базу данных, но требует наименьших усилий для реализации.
Второй по-прежнему очень прост в реализации, но нагрузка на службу аутентификации остается почти такой же.
Третий вариант немного сложнее в реализации, но он сокращает время отклика, поскольку обращения к службе аутентификации не выполняются. Однако, если информации о сеансе слишком много, этот подход просто потерпит неудачу, и масштабируемость вряд ли будет обеспечена.