1 Что такое stateful?
Служба с отслеживанием состояния, то есть сервер должен записывать информацию о клиенте для каждого сеанса, чтобы идентифицировать личность клиента и обрабатывать запрос в соответствии с идентификатором пользователя.Типичный дизайн похож на сеанс в Tomcat.
Например, вход в систему: после входа пользователя в систему мы сохраняем информацию для входа в систему в сеансе сервера и даем пользователю значение cookie для записи соответствующего сеанса. Затем при следующем запросе пользователь приносит значение cookie, мы можем идентифицировать соответствующий сеанс и найти информацию о пользователе.
Какие недостатки?
- Сервер сохраняет большие объемы данных, увеличивая нагрузку на сервер
- Сервер сохраняет состояние пользователя и не может быть расширен по горизонтали
- Клиентские запросы полагаются на сервер, несколько запросов должны обращаться к одному и тому же серверу.
2. Что такое апатрид
Каждая служба в кластере микросервисов предоставляет внешний интерфейс в стиле Rest. И одна из важнейших характеристик стиля Rest: безгражданство сервиса, а именно:
- Сервер не сохраняет информацию о запросе клиента
- Каждый запрос клиента должен содержать самоописывающую информацию, с помощью которой можно идентифицировать личность клиента.
Каковы преимущества?
- Запросы клиентов не зависят от информации сервера, любые множественные запросы не требуют доступа к одной и той же службе.
- Кластер и статус сервера прозрачны для клиента
- Сервер можно переносить и масштабировать произвольно
- Снижение нагрузки на хранилище сервера
3. Как добиться безгражданства
Процесс входа без сохранения состояния:
блок-схема:
Что является наиболее важным моментом во всем процессе входа в систему?
Безопасность токена
Токен – единственный знак, идентифицирующий личность клиента. Если шифрование недостаточно строгое, оно будет подделано.
В чем безопасность и надежность шифрования?
Мы примемАсимметричное шифрование JWT RSA
4.2. Формат данных
JWT содержит три части данных:
Заголовок: Заголовок, обычно заголовок содержит две части информации:
- Тип объявления, вот JWT
- Алгоритм шифрования, индивидуальный
Мы будем base64 зашифровать заголовок (дешифровать), чтобы получить первую часть данных.
Полезная нагрузка: полезная нагрузка, которая является действительными данными, обычно содержит следующую информацию:
- Информация об идентификации пользователя (обратите внимание, что, поскольку здесь используется шифрование base64, его можно расшифровать, поэтому не храните конфиденциальную информацию)
- Заявление о регистрации: например, время выпуска токена, срок действия, эмитент и т. Д.
Эта часть также будет использовать шифрование base64 для получения второй части данных.
Подпись: подпись – это аутентификационная информация для всех данных. Как правило, на основе данных первых двух шагов плюс секрет службы (не допускайте утечки, лучше периодически заменять) и генерировать его с помощью алгоритма шифрования. Используется для проверки целостности и надежности всех данных
Формат генерируемых данных:
Вы можете видеть, что он разделен на 3 сегмента, каждый из которых является частью данных выше.
4.3. Процесс взаимодействия с JWT
блок-схема:
Шаговый перевод:
Поскольку токен, выпущенный JWT, уже содержит идентификационную информацию пользователя, и он будет передаваться в каждом запросе, поэтому службе не нужно сохранять информацию о пользователе или даже обращаться к базе данных для запроса, что полностью соответствует спецификации Rest без сохранения состояния.
4.4. Асимметричное шифрование
Технология шифрования – это технология кодирования и декодирования информации. Кодирование – это перевод исходной читаемой информации (также известной как открытый текст) в кодовую форму (также известную как зашифрованный текст). Обратный процесс – это декодирование (дешифрование).
- Симметричное шифрование, например AES
- Основной принцип: разделите открытый текст на N групп, затем используйте ключ для шифрования каждой группы, чтобы сформировать их собственный зашифрованный текст, и, наконец, объедините все сгруппированные зашифрованные тексты, чтобы сформировать окончательный зашифрованный текст.
- Преимущества: открытый алгоритм, небольшой объем вычислений, высокая скорость шифрования, высокая эффективность шифрования.
- Дефект: обе стороны используют один и тот же ключ, безопасность не может быть гарантирована
- Асимметричное шифрование, например RSA
- Основной принцип: генерировать два ключа одновременно: закрытый ключ и открытый ключ. Закрытый ключ хранится тайно, а открытый ключ может быть выдан доверенному клиенту
- Шифрование с закрытым ключом, для расшифровки храните только закрытый ключ или открытый ключ
- Шифрование с открытым ключом, можно расшифровать только закрытый ключ
- Преимущества: безопасно и сложно взломать
- Недостатки: алгоритм трудоемкий.
- Основной принцип: генерировать два ключа одновременно: закрытый ключ и открытый ключ. Закрытый ключ хранится тайно, а открытый ключ может быть выдан доверенному клиенту
- Необратимое шифрование, например MD5, SHA
История алгоритма RSA:
В 1977 году три математика Ривест, Шамир и Адлеман разработали алгоритм, который может реализовать асимметричное шифрование. Этот алгоритм использует инициалы трех из них: RSA
5. В сочетании с процессом аутентификации Zuul
Мы постепенно развиваем архитектуру системы. Следует отметить, что секрет – это ключ к подписи, поэтому он должен храниться в секрете.Мы храним его в центре аутентификации и не можем получить секрет ни в каком другом сервисе.
5.1. Без шифрования RSA
В микросервисной архитектуре мы можем поместить операцию аутентификации службы в шлюз и напрямую перехватывать запросы, не прошедшие аутентификацию, как показано на рисунке:
В чем проблема?
Каждая аутентификация требует посещения центра аутентификации.Частота сетевых запросов между системами слишком высока, а эффективность немного ниже, а нагрузка на центр аутентификации выше.
5.2. Аутентификация в сочетании с RSA
Посмотрите прямо на картинку:
- Сначала мы используем RSA для генерации открытых и закрытых ключей. Закрытый ключ хранится в центре авторизации, а открытый ключ хранится в Zuul и каждом микросервисе.
- Пользователь запрашивает вход
- Проверка центра авторизации, после прохождения используйте закрытый ключ для подписи и шифрования JWT
- Вернуть jwt пользователю
- Пользователи имеют доступ к JWT
- Zuul расшифровывает JWT напрямую через открытый ключ для проверки, а затем освобождает его после проверки.
- Запрос поступает в микросервис, и микросервис напрямую анализирует JWT с открытым ключом для получения информации о пользователе, не посещая центр авторизации.
1. Создать Центр авторизации
Основные обязанности авторизационного центра:
- Аутентификация пользователя:
- Получите запрос пользователя на вход, проверьте его через интерфейс пользовательского центра и сгенерируйте JWT после передачи
- Используйте закрытый ключ для генерации JWT и возврата
- Аутентификация службы: вызов между микросервисами не проходит через Zuul, будут риски, и потребуется аутентификация центром аутентификации
- Принцип аналогичен аутентификации пользователя, но логика немного сложнее (мы не будем ее здесь реализовывать)
Поскольку jwt генерируется, такие действия, как анализ jwt, также будут использоваться в других микросервисах в будущем, поэтому мы извлечем их в инструменты. Мы объединяем центр аутентификации, инструментальный модуль и сервисный модуль.
1.1. Создайте родительский модуль
Сначала мы создаем родительский модуль, имя: leyou-auth
Измените метод упаковки помпонов на пом:
1.2. Общий модуль
Затем есть общий модуль службы авторизации: leyou-auth-common:
pom.xml:
1.3. Сервис авторизации
pom.xml:
2.JWT инструменты
мы вleyou-auth-commonИмпортируйте инструменты в предклассные материалы:
Нужно быть вleyou-auth-commonВвести зависимость JWT:
3. Инструменты тестирования
мы вleyou-auth-commonПишите тестовые классы на:
3. Написать интерфейс авторизации входа
Далее нам нужноleyou-auth-servciceНапишите интерфейс для предоставления внешних служб авторизации входа. Основной процесс выглядит следующим образом:
3.1. Создание открытого и закрытого ключей
Нам нужно сгенерировать настоящие публичные и приватные ключи в центре авторизации. У нас должен быть секрет для генерации открытого и закрытого ключей, его можно настроить наapplication.ymlв:
leyou:jwt:secret:[email protected](Auth}*^31)&heiMa% pubKeyPath: C:\tmp\rsa\rsa.pub priKeyPath: C:\tmp\rsa\rsa.pri expire:30
Затем напишите класс атрибута и загрузите данные:
@ConfigurationProperties(prefix ="ly.jwt")publicclassJwtProperties{private String secret;private String pubKeyPath;private String priKeyPath;privateint expire;private PublicKey publicKey;private PrivateKey privateKey;privatestaticfinal Logger logger = LoggerFactory.getLogger(JwtProperties.class);@PostConstructpublicvoidinit(){try{
File pubKey =newFile(pubKeyPath);
File priKey =newFile(priKeyPath);if(!pubKey.exists()||!priKey.exists()){
RsaUtils.generateKey(pubKeyPath, priKeyPath, secret);}this.publicKey = RsaUtils.getPublicKey(pubKeyPath);this.privateKey = RsaUtils.getPrivateKey(priKeyPath);}catch(Exception e){
logger.error(«Не удалось инициализировать открытый и закрытый ключи!», e);thrownewRuntimeException();}}}
3.2.Controller
Для написания интерфейса авторизации мы получаем имя пользователя и пароль и после успешной проверки записываем их в cookie.
Код:
3.3.CookieUtils
Следует отметить, что здесь мы используем класс инструмента CookieUtils, который можно найти в информации о предварительном классе, мы добавляем его вleyou-common, А затем введите зависимости, связанные с сервлетами:
Код: опущен
4. Страница входа
Затем давайте посмотрим, может ли страница входа правильно выполнить запрос.
5. Решить проблему с записью файлов cookie
Затем мы проверяем cookie домашней страницы:
Ничего, почему?
5.1. Анализ проблемы
Когда мы тестировали раньше, мы четко видели атрибут Set-Cookie в заголовке ответа. Почему здесь ничего нет?
Когда мы говорили о междоменном использовании cors, мы говорили об условиях, при которых файл cookie междоменного запроса вступает в силу:
- Заголовок ответа службы должен нести Access-Control-Allow-Credentials и быть истинным.
- Значение Access-Control-Allow-Origin в заголовке ответа не должно быть *, это должно быть указанное доменное имя.
- Браузер инициирует ajax и должен указать withCredentials как true
Взгляните на конфигурацию нашего сервера:
Нет проблем.
Посмотрите на конфигурацию ajax клиентского браузера, мыjs/common.jsЕдиная конфигурация аксиомов в:
Все в порядке.
Это означает, что проблема должна быть в заголовке ответа set-cookie. Давайте сейчас подробнее рассмотрим заголовок ответа:
Мы нашли cookiedomainАтрибуты кажутся неправильными.
5.2. Отслеживание CookieUtils
Пойдем в Debug, чтобы отслеживать CookieUtils и видеть, что происходит:
Мы обнаружили, что существует внутренний метод получения домена:
Он получает домен, вычисляя хост сервера, но наш адрес оказался: 127.0.0.1:8087, поэтому при последующих операциях окончательный полученный домен становится:
5.3. Решить изменение адреса хоста
Итак, вот вопрос: почему наш запрос serverName здесь становится: 127.0.0.1:8087?
Имя сервера здесь фактически является именем хоста на момент запроса: Host. Для изменения есть две причины:
Сначала мы меняем конфигурацию nginx, чтобы она не изменяла наш хост:proxy_set_header Host $host;
Перезагрузите nginx:
nginx -s reload
Это решает проблему nginx. Но у Zuul будет другая переадресация, поэтому нам нужно изменить конфигурацию шлюза (проект leyou-gateway):
После перезапуска мы снова протестировали.
Наконец рассчитанный домен:
идеальный!
5.4. Повторное испытание
Мы снова вошли в систему и обнаружили, что файлов cookie по-прежнему нет! !
Что случилось?
Зайдем через RestClient и посмотрим:
Обнаружил, что нетset-cookieUp.
Как дела? ?
5.5. Чувствительный головной фильтр Зуула
Внутри Zuul есть фильтр по умолчанию, который реорганизует информацию заголовка запроса и ответа, чтобы отфильтровать конфиденциальную информацию заголовка:
Вы обнаружите, что здесь будет передан атрибутSensitiveHeadersАтрибут, чтобы получить список конфиденциальных заголовков, а затем добавить его вIgnoredHeaders, Эта информация заголовка будет проигнорирована.
И этоSensitiveHeadersЗначение по умолчанию содержитset-cookie:
Есть два решения:
Глобальные настройки:
Задайте настройки маршрутизации:
zuul.routes.<routeName>.sensitive-headers=
zuul.routes.<routeName>.custom-sensitive-headers=true
Идея состоит в том, чтобы установить для чувствительного заголовка значение null
5.6. Заключительное испытание
Тест после повторного перезапуска:
Оцените статус входа на главную страницу.
Хотя файл cookie был успешно записан, статус входа в систему в верхней части нашей домашней страницы по-прежнему не позволяет определить информацию о пользователе:
Здесь вам нужно инициировать запрос в фоновый режим для получения информации о текущем пользователе на основе файла cookie.
Давайте сначала посмотрим на реализацию страницы
1. Код страницы JS
Верх страницы инкапсулирован нами как независимый компонент Vue, в/js/pages/shortcut.jsв
Откройте js, обнаружите, что компонент Vue определен внутри, и в созданной функции запросите информацию о пользователе:
Проверил веб-консоль и обнаружил, что запрос был инициирован:
Поскольку токен находится в файле cookie, этот запрос обязательно будет содержать информацию о токене в заголовке.
2. Реализуйте пользовательский интерфейс проверки в фоновом режиме
мы вleyou-auth-serviceОпределите интерфейс проверки пользователя, получите токен через файл cookie, а затем верните информацию о пользователе через проверку.
Код:
3. Тестирование
Эффект страницы:
4. Обновить токен
Каждый раз, когда пользователь выполняет новую операцию на странице, время истечения срока действия токена должно быть обновлено, в противном случае информация для входа пользователя станет недействительной через 30 минут. Обновление на самом деле состоит в том, чтобы регенерировать токен, а затем записывать файл cookie.
Возникает вопрос: как мы узнаем, что у пользователя есть действие?
Фактически, каждый раз, когда пользователь спрашивает о своей личной информации, это доказывает, что он просматривает веб-страницы, и сейчас более подходящее время для обновления файла cookie. Поэтому мы можем улучшить интерфейс для проверки статуса входа пользователя прямо сейчас и добавить логику для обновления токена.
2. Логика фильтра записи
Основная логика:
- Получите токен в cookie
- Проверить токен через JWT
- Пройдено: пусть пройдет; сбой: перенаправить на страницу входа
3. Белый список
Следует отметить, что не все пути нужно перехватывать, например:
Кроме того, интерфейсы, связанные с фоновым управлением, временно освобождены, потому что у нас нет входа в систему и разрешений, но проверка входа требуется в производственной среде:
- Закулисный товарный сервис:
/item/**
Поэтому нам нужно настроить белый список при перехвате, если он есть в списке, то перехват не будет.
вapplication.yamlДобавить правила в:
Beared token
В стандартном процессе авторизации OAuth, после того как сервер ресурсов получит запрос от клиента, ему необходимо проверить токен доступа на сервере авторизации и получить дополнительную информацию о клиенте. С помощью Beared Token, представленного в версии OAuth 2.
0, мы можем сохранить этот вызов, сохранить информацию о клиенте в токене доступа и выполнить аутентификацию токена доступа на стороне сервера ресурсов. Основной Beared Token имеетSAMLс участиемJWTДва формата: SAML на основе XML и JWT на основе JSON. Поскольку большинство микросервисов используют JSON в качестве формата сериализации, JWT используется более широко.
Oauth
Говоря о конкретных протоколах авторизации, первая реакция многих людей – OAuth. На самом деле это так. Многие открытые платформы интернет-компаний основаны на протоколе OAuth, например:Google APIs, Интерфейс авторизации веб-страницы WeChat, Стандартный процесс авторизации OAuth выглядит следующим образом:
В соответствии со сценарием микросервиса поставщик услуг эквивалентен серверу ресурсов на приведенном выше рисунке, вызывающий сервис эквивалентен клиенту, а центр авторизации эквивалентен комбинации сервера авторизации и владельца ресурса.
Для получения дополнительной информации об OAuth, пожалуйста, перейдите наOAuth2илиOAuth2 китайская версия。
Вершина айсберга
На этом этапе, даже если эта серия трансформации микро-услуг заканчивается, я буду продолжать записывать ее, когда у меня будет больше накоплений в будущем. Микросервисы – большая тема, так как Мартин Фаулер писалМарт 2022С тех пор, как он был выдвинут, он становится все более и более популярным, и вместе с другой темой контейнеризации он создал новую эру DevOps, опередив технологическую тенденцию различных интернет-компаний в стране и за рубежом, а также затронув наше поколение программистов, особенно бэк-энд.
И эксплуатация и обслуживание мышления. С этой точки зрения, я написал эту серию статей о трансформации микро-услуг также неизбежно случайно, я надеюсь принести новое вдохновение и мышление для вас, кто читал эти статьи. Если вы также заинтересованы в микросервисах или у вас есть идеи, с которыми вы хотите связаться со мной, добро пожаловать вСписок похвалОставьте свой WeChat ID включенным.
Чтение подростка – это как смотреть на луну в промежутке, чтение средних лет – как смотреть луну во дворе, а старое чтение – как играть луну на сцене. Все они используют глубину опыта как глубину своих ушей. – Чжан Чао, «Тень твоей мечты»
Выбор кадра
При выборе платформы OAuth я в основном исследовалCAS,Apache Oltu,Spring Security OAuthс участиемOAuth-ApisСравнение выглядит следующим образом:
Независимо от реальных бизнес-сценариев, CAS и Spring Security OAuth имеют очевидные преимущества перед двумя другими средами с точки зрения стоимости интеграции и масштабируемости. Как упоминалось ранее, поскольку мы выбрали Spring Boot в качестве унифицированной среды реализации микросервиса, Spring Security OAuth является более естественным выбором, а затраты на обслуживание относительно низкие (на стороне сервера).
Каркас сертификатов открытых ключей
Мы приступаем к изучению четвертой редакции рекомендаций X.509
[
51
]
, которая регламентирует следующие аспекты:
Идейной основой рекомендаций X.509 являются сертификаты открытых
ключей, обслуживающие такие грани информационной безопасности, как
конфиденциальность и целостность, и такие сервисы, как аутентификация и неотказуемость.
В курсе “Основы информационной безопасности”
[
91
]
приведены необходимые сведения о криптографии
с открытыми ключами и механизме электронной цифровой подписи (ЭЦП);
далее предполагается, что они уже известны.
Сертификат открытого ключа – это структура данных, обеспечивающая
ассоциирование открытого ключа и его владельца. Надежность
ассоциации, подлинность сертификата подтверждаются подписью удостоверяющего центра (УЦ).
Сертификаты имеют конечный срок годности. Поддерживать
актуальность информации об их статусе помогают списки отзыва,
подписываемые удостоверяющими центрами и содержащими перечни
сертификатов, переставших быть годными.
Формат сертификата описан в курсе
[
91
]
. В простейшем случае он выглядит так:
Здесь:
Отметим, что в общем случае формат может быть существенно
сложнее. С помощью механизма расширений его можно приспособить для
нужд различных приложений и сообществ пользователей. В X.509
предусмотрены полезные расширения, носящие универсальный характер.
Каждое расширение включает имя, флаг критичности и значение. Если
при обработке (проверке) сертификата встречается неизвестное
расширение с флагом критичности FALSE, оно может быть
проигнорировано; если же у подобного расширения флаг равен TRUE,
сертификат приходится считать некорректным.
Сертификаты открытых ключей подразделяются на два основных вида:
Оконечные сущности не имеют права выпускать сертификаты. Удостоверяющие центры ведают выпуском и аннулированием сертификатов,
которые относятся к одному из двух классов:
Рассмотрим процесс получения и проверки пользователем A открытого
ключа пользователя B. Элемент Директории, представляющий A, содержит
один или несколько сертификатов открытых ключей A, заверенных удостоверяющим центром, который мы обозначим CA (A) (а сертификат A
– как CA (A) <<A>> ) и которому, разумеется,
соответствует свой узел в Информационном Дереве.
Предполагается, что
пользователь доверяет своему УЦ, поэтому, если существует сертификат CA (A) <<B>>, процесс выяснения открытого ключа B можно
считать завершенным.
В противном случае приходится строить так
называемый сертификационный маршрут от A к B (обозначается A ->
B ), начинающийся сертификатом CA (A) <<X1>>, который CA
(A) выдал некоторому другому УЦ, X1, ставшему вследствие этого
доверенным для A. Маршрут продолжается сертификатом вида X1
<<
X2>>, содержит промежуточные звенья вида Xi
<<Xi 1>> и завершается сертификатом Xn
<<B>>.
Элемент Директории, соответствующий удостоверяющему центру,
содержит сертификаты двух типов: прямые
(сгенерированные данным УЦ для других) и обратные (выданные
данному УЦ другими).
Если, кроме того, удостоверяющие центры
образуют иерархию, соответствующую Информационному Дереву, то
сертификационный маршрут можно построить без привлечения
дополнительной информации, только на основе различительных имен A и B.
Действительно, с помощью обратных сертификатов выполняется подъем
от CA (A) до корня поддерева, общего для A и B, а затем, с помощью
прямых сертификатов осуществляется спуск до CA (B).
В рассмотренном
выше процессе A – пользователь сертификата, B – его владелец
( субъект ), CA (B) – удостоверяющий центр.
Все три стороны
несут друг перед другом определенные обязательства и, в свою
очередь, пользуются предоставляемыми гарантиями. Обязательства и
гарантии могут быть зафиксированы в политике сертификата,
ссылка на которую хранится в одном из полей расширений.
Обычно политика – это общепринятый текст, но в ней могут
присутствовать и формальные условия, допускающие автоматическую
проверку.
При построении и использовании сертификационного маршрута
проверяется согласованность политик, присутствующих в кросс-сертификатах. Еще один пример употребления данного поля
расширения – наложение и проверка ограничений на длину
сертификационного маршрута (вообще говоря, чем длиннее маршрут, тем
меньше доверия он вызывает).
Другая группа дополнительных полей сертификатов обслуживает
способы и срок действия ключей. Для шифрования и цифровой подписи
применяют разные ключи; следовательно, у одного субъекта может быть
несколько пар ключей и, соответственно, несколько сертификатов.
Чтобы выбрать среди них нужный, необходимо иметь возможность
выяснить назначение представленного в сертификате открытого ключа.
Аналогично, может потребоваться знание срока годности секретного
ключа, посредством которого формируют ЭЦП, поскольку этот срок
обычно меньше, чем у открытого ключа, проверяющего подпись.
Значительная часть рекомендаций X.509 посвящена спискам отзыва
сертификатов; мы, однако, не будем останавливаться на этом сугубо
техническом вопросе.
Обзор центра авторизации
Эта статья является четвертой в серии трансформации микро-услуг, тема – центр авторизации. С сервисным реестром и центром настройки следующим шагом должна быть возможность инициировать сервисные вызовы, верно? Подождите, есть еще один ключевой вопрос, который необходимо решить.
В отличие от вызова метода внутри монолитного приложения, существует концепция авторизации сервиса для вызова сервиса. Например, первоначально семья из трех братьев жила в одном доме, и каждый раз, когда они поднимались на гору, чтобы охотиться, они просто кричали.
Строго говоря, авторизация сервиса состоит из двух частей: аутентификация и авторизация. Аутентификация решает проблему личности вызывающего абонента, то есть того, кто стучит в дверь. Авторизация решает проблему того, разрешен ли вызов, то есть пропускает дверь.
Существует три общих авторизации службы: простая авторизация, авторизация по соглашению и центральная авторизация.
- Простая авторизация. Поставщик услуг не выполняет настоящую авторизацию, но для автоматической авторизации использует внешнюю среду, такую как белый список IP-адресов, доменное имя в интрасети и т. Д. Это как три брата, оставляющие заднюю дверь друг к другу.
- Авторизация протокола: поставщик услуг и вызывающая сторона заранее согласовывают ключ. Каждый раз, когда вызывающая сторона инициирует запрос вызова службы, запрашиваемое содержимое шифруется согласованным ключом для создания заголовка аутентификации (включая уникальный идентификационный идентификатор вызывающей стороны). После получения запроса поставщик услуг находит соответствующий ключ в соответствии с заголовком аутентификации для аутентификации запроса, а затем решает, авторизовать ли вызов после прохождения аутентификации. Это похоже на соглашение между тремя братьями: один раз стать старшим, два – вторым, а три – третьим.
- Центральная авторизация: введите независимый центр авторизации. Каждый раз, когда вызывающий сервис инициирует запрос вызова службы, он сначала получает код авторизации из центра авторизации, а затем прикрепляет его к исходному запросу и отправляет его поставщику услуг. После того, как поставщик получает запрос, он сначала Восстановите код авторизации для идентификационной информации вызывающего абонента и соответствующего списка разрешений через центр авторизации, а затем решите, следует ли авторизовать вызов. Это похоже на установку сетевого считывателя отпечатков пальцев на дверях каждого из трех братьев, чтобы идентифицировать личность молотка с помощью удаленных отпечатков пальцев.
Вообще говоря, простая авторизация часто используется в сценариях с простыми бизнес-правилами и низкими требованиями к безопасности. Авторизация протокола больше подходит для сценариев вызова службы точка-точка или архитектуры C / S, таких какAmazon S3 API, Для микроуслуг с сетчатой структурой централизованная авторизация является наиболее подходящим и гибким выбором из трех методов:
- Реализация поставщика услуг упрощена, что позволяет поставщику сосредоточиться на дизайне разрешений, а не на реализации.
- Что еще более важно, он предоставляет набор механизмов авторизации, независимых от поставщика услуг и вызывающего абонента. Нет необходимости переиздавать сервис. Пока правила авторизации сервиса изменяются в центре авторизации, это может повлиять на последующие вызовы сервиса.
Окончательное предложение
Наконец, мы внедрили наш собственный центр авторизации сервисов на основе OAuth-среды Spring Security. Часть аутентификации относительно проста. В настоящее время поддерживается только аутентификация в частной сети. Процесс авторизации общего обслуживания выглядит следующим образом:
Стоит отметить, что в дополнение к сервисным вызовам наш центр авторизации сервисов также добавил поддержку единого входа через корпоративную учетную запись WeChat для обеспечения единого входа / выхода из каждой серверной части сервиса, что будет подробно описано позже.