Как обрабатывать аутентификацию пользователей при межсервисном общении? - PullRequest
1 голос
/ 15 апреля 2020

У меня есть одно большое монолитное c приложение, которое выполняет все службы аутентификации и все бизнес-логи c (назовем это Сервис A). У меня есть внешнее приложение (назовем его Сервис B), которое работает как дополнительное приложение для Сервиса A, и каждый раз, когда Сервис B функционирует, оно обращается к API, чтобы проверить, аутентифицирован ли пользователь, для которого вызывается Сервис B, в Сервисе. А или нет. Служба B добавляет маркер guid, представляющий объект пользователя, для которого вызывается Служба B, и Служба A должна проверить, аутентифицирован ли пользователь с guid в Службе A. Это могло быть выполнено, если бы оба запроса были от одного и того же браузер. Но так как запрос API для проверки аутентификации в Сервисе B выполняется из Сервиса A, кажется, что пользователь не аутентифицирован, даже если пользователь аутентифицирован в браузере, поскольку запрос API выполняется из Сервиса B.

Что может быть лучшим решением для этого?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Я часто нахожу этот же вопрос о распределенных архитектурах. Прочитайте мою статью, которая является источником Harvard Business Review, и поймите сложность централизации и ее последствия Короче говоря, распределенные архитектуры не моделируют необходимую систему, и поэтому принудительно приводить систему в соответствие с такой архитектурой контрпродуктивно.

http://www.powersemantics.com/p.html

Make A и B независимы друг от друга путем интеграции отдельной (даже избыточной) аутентификации в каждой службе. Это называется франчайзингом процесса, но вы должны думать об этом как о предоставлении отдельным работникам своих собственных отверток. Даже аутентификация может быть сформирована бизнес-требованиями. Windows проверка подлинности может работать сегодня для обеих служб, которые разрешены вашей централизованной организацией, но завтра может потребоваться логин / пароль, чтобы разрешить доступ внешним / не сетевым пользователям. Вы не можете просто централизовать аутентификацию и думать о B как о подклассе или расширении A. В любом случае вы рискуете однажды децентрализовать ее.

0 голосов
/ 16 апреля 2020

Не пробовал в браузере, но использование JWT с keycloak может подойти вам. Возможно, вы уже нашли решение, но это: с использованием keycloak: идентификация и управление доступом может быть хорошим чтением.

...