картина

Микросервисам всегда было сложно выполнять аутентификацию и авторизацию пользователей, и это стало еще труднее, поскольку режим пароля 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.Еслив моей Кроме того, вы также можете щелкнуть , чтобы прочитать исходную прямую колонку.