Использование Apache APISIX и Authing для реализации централизованного управления аутентификацией

API7.ai

January 4, 2022

Ecosystem

Введение

О Apache APISIX

Apache APISIX — это динамический, высокопроизводительный API-шлюз, работающий в реальном времени, который предоставляет богатые функции управления трафиком, такие как балансировка нагрузки, динамический апстрим, канареечные релизы, аутентификация, наблюдаемость и многое другое. Apache APISIX не только поддерживает динамическое изменение и горячую замену плагинов, но также имеет множество полезных плагинов. Плагин OpenID Connect для Apache APISIX поддерживает протокол OpenID Connect, что позволяет пользователям использовать этот плагин для интеграции Apache APISIX с сервисами Authing и развертывания в качестве централизованного шлюза аутентификации в корпоративной среде.

О Authing

Authing — это первый в Китае продукт для управления идентификацией, ориентированный на разработчиков, который интегрирует все основные протоколы идентификации и предоставляет полные и безопасные услуги аутентификации и управления доступом для предприятий и разработчиков. Основываясь на принципе "API First", все распространенные функции в области идентификации модульно инкапсулированы, а все возможности предоставляются разработчикам через SDK на различных языках программирования. Пользователи также могут гибко использовать открытые RESTful API Authing для расширения функциональности, чтобы удовлетворить потребности в управлении идентификацией в различных бизнес-сценариях.

Что такое централизованная аутентификация

Традиционный режим аутентификации

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

традиционный процесс аутентификации

Централизованный режим аутентификации

В отличие от традиционного режима, централизованная аутентификация выносит процесс аутентификации пользователя за пределы серверного приложения. На примере Apache APISIX процесс централизованной аутентификации выглядит следующим образом: сначала пользователь инициирует запрос, затем фронтальный шлюз отвечает за процесс аутентификации пользователя, взаимодействуя с провайдером идентификации и отправляя запрос на авторизацию. Провайдер идентификации возвращает информацию о пользователе. После завершения идентификации пользователя шлюз передает информацию о пользователе серверному приложению в виде заголовка запроса.

централизованный процесс аутентификации

Преимущества централизованной аутентификации

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

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

В сочетании с мощными функциями управления аутентификацией Authing можно достичь следующих возможностей.

  1. Управление жизненным циклом служб аутентификации через консоль, включая создание, включение, отключение и т.д.
  2. Реальное время и визуальный мониторинг приложений, включая количество запросов, задержку вызовов интерфейсов и информацию об ошибках, а также уведомления в реальном времени.
  3. Централизованное ведение журналов для удобного просмотра информации о входе, выходе и изменениях в приложении.

Подробнее можно узнать на странице Authing Access Gateway.

Как реализовать централизованную аутентификацию с использованием Apache APISIX и Authing

Шаг 1: Настройка Authing

  1. Войдите в свой аккаунт Authing, выберите "Создать свое приложение" и заполните имя приложения и адрес аутентификации. Если у вас нет аккаунта Authing, посетите Authing, нажмите "Вход/Регистрация" в правом верхнем углу, чтобы зарегистрировать аккаунт. Настройка Authing
  2. Нажмите "Создать", чтобы создать приложение Authing. Создание приложения Authing
  3. В процессе аутентификации Authing будет отклонять URL-адреса обратного вызова, отличные от настроенных. Поскольку это локальный тест, URL-адрес для входа и выхода установлен на адрес доступа APISIX http://127.0.0.1:9080/. Установка URL для входа и выхода
  4. Создание пользователя (опционально). На странице списка пользователей создайте пользователя с учетной записью user1/user1, и вы можете настроить доступ к приложению на странице "Информация о пользователе - Управление доступом" (по умолчанию доступ разрешен). Создание пользователя
  5. Посетите страницу приложения для следующих настроек, которые необходимы при настройке плагина OpenID Connect в Apache APISIX.
    1. App ID: Идентификатор клиента OAuth, соответствующий client_id и {YOUR_CLIENT_ID} ниже.
    2. App secret: Секретный ключ клиента OAuth, соответствующий client_secret и {YOUR_CLIENT_SECRET} ниже.
    3. Service_discovery_address: Адрес обнаружения службы приложения. Соответствует {YOUR_DISCOVERY} ниже. настройки

Шаг 2: Установка Apache APISIX

Вы можете установить Apache APISIX различными способами, включая исходные пакеты, Docker, Helm Chart и т.д.

Установка зависимостей

Для работы Apache APISIX требуется наличие зависимостей NGINX и etcd.

Перед установкой Apache APISIX установите зависимости в зависимости от используемой операционной системы. Мы предоставляем инструкции по установке зависимостей для CentOS7, Fedora 31 и 32, Ubuntu 16.04 и 18.04, Debian 9 и 10, а также macOS. Подробнее см. Установка зависимостей.

Установка через RPM-пакет (CentOS 7)

Этот метод установки подходит для CentOS 7; выполните следующую команду для установки Apache APISIX.

sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm

Установка через Docker

Подробнее см. Установка Apache APISIX с помощью Docker.

Установка через Helm Chart

Подробнее см. Установка Apache APISIX с помощью Helm Chart.

Установка через исходный код

  1. Создайте каталог с именем apisix-2.7.
mkdir apisix-2.7
  1. Загрузите исходный пакет Apache APISIX.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz

Вы также можете загрузить исходный пакет Apache APISIX с официального сайта. Официальный сайт Apache APISIX - Страница загрузки также предоставляет исходные пакеты для Apache APISIX, APISIX Dashboard и APISIX Ingress Controller.

  1. Распакуйте исходный пакет Apache APISIX.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  1. Установите необходимые библиотеки Lua.
# Перейдите в каталог apisix-2.7 cd apisix-2.7 # Создайте зависимости make deps

Инициализация зависимостей

Выполните следующую команду для инициализации конфигурационного файла NGINX и etcd.

# инициализация конфигурационного файла NGINX и etcd make init

Шаг 3: Запуск Apache APISIX и настройка маршрута

  1. Выполните следующую команду для запуска Apache APISIX.

    apisix start
  2. Создайте маршрут и настройте плагин OpenID Connect. Список конфигураций OpenID Connect приведен ниже.

ПолеЗначение по умолчаниюОписание
client_idN/AИдентификатор клиента OAuth
client_secretN/AСекретный ключ клиента OAuth
discoveryN/AКонечные точки обнаружения службы для провайдеров идентификации
scopeopenidОбласть ресурсов, к которым требуется доступ
relmapisixУказывает информацию аутентификации в заголовке ответа WWW-Authenticate
bearer_onlyfalseПроверять ли токен в заголовке запроса
logout_path/logoutURI для выхода
redirect_urirequest_uriURI, на который провайдер идентификации перенаправляет пользователя, по умолчанию используется адрес запроса
timeout3Время ожидания запроса в секундах
ssl_verifyfalseПроверять ли SSL-сертификат провайдера идентификации
introspection_endpointN/AURL конечной точки проверки токена провайдера идентификации, который будет извлечен из ответа обнаружения, если оставить пустым.
introspection_endpoint_auth_methodclient_secret_basicМетод аутентификации для проверки токена
public_keyN/AПубличный ключ для аутентификации токена
token_signing_alg_values_expectedN/AАлгоритм для аутентификации токенов
set_access_token_headertrueПередавать ли токен доступа в заголовке запроса
access_token_in_authorization_headerfalseТокен доступа помещается в заголовок Authorization, если true, и в заголовок X-Access-Token, если false.
set_id_token_headerfalseНе передавать ID-токен в заголовок запроса X-ID-Token
set_userinfo_headerfalseПередавать ли информацию о пользователе в заголовок запроса X-Userinfo

В следующем примере кода создается маршрут через API администратора Apache APISIX, устанавливая апстрим маршрута на httpbin.org. httpbin.org — это простой серверный сервис для приема и ответа на запросы, страница get httpbin.org будет использована ниже, см. http bin get.

Подробнее о конфигурации см. Плагин OpenID Connect для Apache APISIX.

curl -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{ "uri":"/*", "plugins":{ "openid-connect":{ "client_id":"{YOUR_CLIENT_ID}", "client_secret":"{YOUR_CLIENT_SECRET}", "discovery":"https://{YOUR_DISCOVERY}", "scope":"openid profile", "bearer_only":false, "realm":"apisix", "introspection_endpoint_auth_method":"client_secret_post", "redirect_uri":"http://127.0.0.1:9080/" } }, "upstream":{ "type":"roundrobin", "nodes":{ "httpbin.org:80":1 } } }'

Шаг 4: Доступ к Apache APISIX

  1. Посетите "http://127.0.0.1:9080/get", и страница будет перенаправлена на страницу входа Authing, так как плагин OpenID Connect уже включен (эту страницу можно настроить в консоли Authing в разделе "Приложения - Брендинг"). Доступ к Apache APISIX

  2. Введите пароль для учетной записи пользователя, зарегистрированной в Authing, или пользователя user1/user1, созданного на Шаге 1, и нажмите "Войти", чтобы войти в аккаунт Authing.

  3. После успешного входа вы сможете успешно получить доступ к странице get на httpbin.org. Страница httpbin.org/get вернет запрошенные данные, как показано ниже.

    ... "X-Access-Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFqeU55aVdVd2NhbUFxdEdVRUNCeFNsTWxQSWtTR2N1NmkyZzhEUk1OSGsifQ.eyJqdGkiOiJjTy16a0pCS0NSRFlHR2kyWkJhY0oiLCJzdWIiOiI2MWM5OGFmOTg0MjI4YWU0OTYyMDU4NTIiLCJpYXQiOjE2NDA1OTg4NTgsImV4cCI6MTY0MTgwODQ1OCwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSIsImlzcyI6Imh0dHBzOi8vYXBpc2l4LmF1dGhpbmcuY24vb2lkYyIsImF1ZCI6IjYxYzk4M2M0YjI4NzdkNDg2OWRkOGFjYiJ9.l2V8vDWcCObB1LjIhKs2ARG4J7WuB-0c-bnYZG2GP2zcpl6PMAPcId2B76CaXCU58ajGcfRmOlWJ67UaHrfWKv8IM4vcYN1gwhKdokSyrhEM31gQE-MzNEsEbPaVIGXdpR1N2JnAJK5-tKIjopDAXSwArfO6fQKTpjLhCi3COIA169WGRR4CKCwNzzpFAYP2ilNc18D_HRTBLS6UjxZSNUtWE5dbx7uBjblhwIwn5e1fxiEQcknVK8Dxf8NUliFECvr02HX2hNvmuCECkvA_mZYlshAeqidK8tSEXirAWsWS5jlXFqLiBJkhSHFrbxRyqeOSfJCJR_YcCwk9AzgZGg", "X-Id-Token": "eyJhdF9oYXNoIjoiRl8tRjZaUVgtWVRDNEh0TldmcHJmUSIsImJpcnRoZGF0ZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdlbmRlciI6IlUiLCJnaXZlbl9uYW1lIjpudWxsLCJpc3MiOiJodHRwczpcL1wvYXBpc2l4LmF1dGhpbmcuY25cL29pZGMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oiLCJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwiaWF0IjoxNjQwNTk4ODU4LCJuaWNrbmFtZSI6bnVsbCwibm9uY2UiOiJmMTlmZjhjODM5NzdmZjNlMDczMzZmMzg3Y2QxM2EzMSIsIm1pZGRsZV9uYW1lIjpudWxsLCJleHAiOjE2NDE4MDg0NTgsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYXVkIjoiNjFjOTgzYzRiMjg3N2Q0ODY5ZGQ4YWNiIiwicHJvZmlsZSI6bnVsbH0=", "X-Userinfo": "eyJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwicHJvZmlsZSI6bnVsbCwibmlja25hbWUiOm51bGwsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJmYW1pbHlfbmFtZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImdpdmVuX25hbWUiOm51bGwsIm1pZGRsZV9uYW1lIjpudWxsLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oifQ==" ...

    X-Access-Token: Apache APISIX помещает токен доступа, полученный от провайдера идентификации, в заголовок запроса X-Access-Token, при необходимости его можно поместить в заголовок Authorization через параметр access_token_in_authorization_header в конфигурации плагина.

    X-Access-Token

    X-Id-Token: Apache APISIX помещает ID-токен, полученный от провайдера идентификации, в заголовок запроса X-Id-Token после кодирования base64, что можно включить или отключить через параметр set_id_token_header в конфигурации плагина.

    X-Id-Token

    X-Userinfo: Apache APISIX помещает информацию о пользователе, полученную от провайдера идентификации, в X-Userinfo после кодирования base64. Вы можете выбрать, включать ли эту функцию, используя параметр set_userinfo_header в конфигурации плагина.

    X-Userinfo

    Как видно, Apache APISIX передает заголовки X-Access-Token, X-Id-Token и X-Userinfo в апстрим. Апстрим может разобрать эти заголовки, чтобы получить информацию о пользователе и его метаданные.

  4. В разделе "Журнал аудита - Журнал действий пользователя" в консоли Authing можно наблюдать информацию о входе пользователя user1. Информация о входе

Заключение

В этой статье описаны подробные шаги по интеграции Apache APISIX с Authing.

Apache APISIX не только стремится поддерживать свою высокую производительность, но и уделяет большое внимание развитию экосистемы с открытым исходным кодом. В настоящее время Apache APISIX имеет более 10 плагинов, связанных с аутентификацией и авторизацией, которые поддерживают интеграцию с основными сервисами аутентификации и авторизации в отрасли.

Если у вас есть потребность в интеграции с другими провайдерами аутентификации, посетите GitHub Apache APISIX и оставьте свои предложения через issue; или подпишитесь на рассылку Apache APISIX, чтобы выразить свои мысли по электронной почте.

Tags: