Микросервисам всегда было сложно выполнять аутентификацию и авторизацию пользователей, и это стало еще труднее, поскольку режим пароля OAuth2.0 отменен. Сегодня друг из группы толстых братьев столкнулся с непростыми проблемами при построении системы аутентификации и авторизации пользователей, из-за чего толстый брат почувствовал, что пришло время поделиться некоторыми идеями.
две идеи
Обычно существует два способа аутентификации и авторизации для микросервисов:
-
Всю аутентификацию и авторизацию обрабатывает независимый сервер аутентификации и авторизации пользователей, который отвечает только за выдачу токенов , а затем шлюз отвечает только за пересылку запросов к каждому модулю микросервиса, и каждый модуль микросервиса сам проверяет токен . -
Во-вторых, шлюз не только берет на себя роль переадресации трафика, но также осуществляет процесс аутентификации и авторизации, а запрошенная в настоящее время аутентификационная информация передается шлюзом нижестоящему серверу.
Первый очень прост, и я разработал его таким образом в нескольких проектах микросервисов. Если вы никогда не проектировали его раньше, я действительно рекомендую сделать это в соответствии с этой идеей. Вам нужно только построить сервер, отвечающий за управление разрешениями пользователей и ролей. Другие модули микросервиса выступают в качестве серверов ресурсов для взаимодействия с этим сервером авторизации пользователей сами по себе, plus Модель с тремя семьями достаточна для различных сценариев.

Второй тип сочетает в себе систему OAuth 2. Шлюз не только берет на себя функцию переадресации трафика, но также на уровне шлюза обрабатываются аутентификация и авторизация, а токен будет ретранслироваться нижестоящей службе. В этом режиме необходимо создать службу UAA (учетная запись пользователя и аутентификация) . Он очень гибкий, может управлять пользователями или позволяет доверенным клиентам управлять пользователями самостоятельно, и отвечает только за аутентификацию клиентов (в отличие от аутентификации пользователей) и авторизацию клиентов. В настоящее время при построении систем безопасности микросервисов с использованием OAuth2 используется этот метод.

Далее я поделюсь результатами моего второго подхода.
Spring Cloud Gateway объединяет OAuth2 для предоставления услуг UAA
Используемые методы:
-
Весенний облачный шлюз -
Сервер авторизации Spring -
Spring Security 5.0 OAuth2-клиент -
ОДК 1.0
Главная идея
Сервер UAA , естественно, выполняется Spring Authorization Server . Он отвечает за управление всем пользователем, конечно, можно выделить и выделенный пользовательский сервер, но UAA должен общаться с пользовательским сервисом через Spring Cloud OpenFeign , кроме того, он еще и сервер авторизации OAuth2 , управляет OAuth2 клиентов и обрабатывает авторизацию OAuth2 . Тут дело доходит до того, что шлюзу необходимо зарегистрироваться на сервере UAA в качестве клиента OAuth2 и действовать как клиент OAuth2 .

Когда пользовательский агент (браузер, приложение) запрашивает ресурсы через шлюз:

Выше приведен стандартный процесс кода авторизации OAuth2 , и Spring Cloud Gateway направит пользователя к интерфейсу входа на сервер UAA для входа.

После входа конечного пользователя подтвердите авторизацию и обратите внимание на ссылку F12 .

После того, как пользователь проверит авторизацию и подтвердит, доступ к ресурсу осуществляется успешно, а также просматривается ссылка звонка.

После того, как авторизация подтверждена и отправлена, она снова перенаправляется на процесс входа в систему с кодом авторизации OAuth2 , и, наконец, ресурс получается.
Глядя на окончательные детали запроса, мы получили все разрешения пользователя /res/foo
без токена .

Это все из-за ретрансляции токенов шлюза , фронтенд-приложение хорошо экранирует токен JWT .
❝
При наличии нескольких узлов шлюза и узлов UAA может потребоваться объединить сеанс Spring для реализации распределенного сеанса и распределенного управления некоторой информацией о клиенте и информации о пользователе.
Подвести итог
Благодаря внедрению вышеуказанного процесса небольшой партнер с сильными практическими способностями должен быть в состоянии реализовать соответствующие функции. Я обобщаю соответствующие знания.По некоторым причинам толстый брат пока не может дать конкретную DEMO , но это будет подробно объяснено колонке OAuth2.Еслив моей Кроме того, вы также можете щелкнуть , чтобы прочитать исходную прямую колонку.