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

API7.ai

September 7, 2021

Ecosystem

Использование плагина OpenID Connect для Apache APISIX для настройки аутентификации Okta — это простой трехэтапный процесс. Он позволяет перейти от традиционного режима аутентификации к централизованному режиму аутентификации идентификации. В следующих разделах описаны шаги по настройке аутентификации Okta с использованием плагина OpenID Connect для Apache APISIX.

Централизованный режим аутентификации идентификации, по сравнению с традиционным режимом аутентификации, имеет следующие преимущества:

  1. Централизованная аутентификация упрощает процесс разработки приложений.
  2. Централизованная аутентификация повышает безопасность бизнеса.

Предварительные требования

Иметь готовый к использованию аккаунт Okta.

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

  1. Войдите в свой аккаунт Okta, нажмите "Create App Integration", чтобы создать приложение Okta. Create App Integration
  2. Выберите "OIDC- OpenID Connect" для метода входа и "Web Application" для типа приложения. Create a new App Integration
  3. Установите URL-адреса перенаправления для входа и выхода. "Sign-in redirect URIs" — это ссылки, на которые разрешено перенаправление после успешного входа, а "Sign-out redirect URIs" — это ссылки, на которые происходит перенаправление после успешного выхода. В этом примере мы установили оба URL-адреса перенаправления для входа и выхода на http://127.0.0.1:9080/. Set the redirect URL for login and logout
  4. После завершения настроек нажмите "Save", чтобы сохранить изменения. save the changes
  5. Перейдите на страницу General приложения, чтобы получить следующие конфигурации, которые необходимы для настройки OpenID Connect в Apache APISIX.
  • Client ID: Идентификатор приложения, который соответствует client_id ниже.
  • Client secret: Ключ приложения, который соответствует client_secret ниже.
  • Okta domain: Домен, используемый приложением, соответствующий {ISSUER} ниже.

obtain configuration

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

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

Среда выполнения Apache APISIX требует зависимостей от NGINX и etcd. Перед установкой Apache APISIX установите зависимости в соответствии с используемой операционной системой. Мы предоставляем инструкции по установке зависимостей для CentOS7, Fedora 31 & 32, Ubuntu 16.04 & 18.04, Debian 9 & 10 и MacOS. Подробнее см. Install Dependencies.

Установка через 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

См. Installing Apache APISIX with Docker.

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

См. Installing Apache APISIX with Helm Chart.

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

  1. Создайте каталог с именем apisix-2.7.

    mkdir apisix-2.7
  2. Скачайте исходный пакет Apache APISIX Release.

    wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz

    Вы также можете скачать исходный пакет Apache APISIX Release с сайта Apache APISIX. Apache APISIX Official Website - Download Page также предоставляет исходные пакеты для Apache APISIX, APISIX Dashboard и APISIX Ingress Controller.

  3. Распакуйте исходный пакет Apache APISIX Release.

    tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  4. Установите зависимые библиотеки 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. В следующем примере кода создается маршрут через API администратора Apache APISIX, устанавливая путь к вышестоящему серверу на httpbin.org, простой сервис для получения и ответа на запросы. В дальнейшем будет использоваться страница get httpbin.org. Подробнее см. http bin get. Для конкретных конфигураций см. Apache APISIX OpenID Connect Plugin.

Конфигурационные поля OpenID Connect перечислены ниже:

ПолеЗначение по умолчаниюОписание
client_id""Идентификатор клиента OAuth.
client_secret""Секрет клиента OAuth.
discovery""Конечные точки обнаружения сервисов для провайдеров идентификации.
scopeopenidОбласть ресурсов для доступа.
relmapisixУкажите информацию аутентификации в заголовке ответа WWW-Authenticate.
bearer_onlyfalseПроверять ли токен в заголовке запроса.
logout_path/logoutURI для выхода.
redirect_urirequest_uriURI, на который провайдер идентификации перенаправляет обратно, по умолчанию — адрес запроса.
timeout3Время ожидания запроса, единица измерения — секунды.
ssl_verifyfalseПроверять ли SSL-сертификат провайдера идентификации.
introspection_endpoint""URL конечной точки проверки токена провайдера идентификации, который будет извлечен из discovery, если оставить пустым.
introspection_endpoint_auth_methodclient_secret_basicНазвание метода аутентификации для проверки токена.
public_key""Публичный ключ для токена аутентификации.
token_signing_alg_values_expected""Алгоритм для токенов аутентификации.
set_access_token_headertrueПередавать ли токен доступа в заголовке запроса.
access_token_in_authorization_headerfalseПомещать ли токен доступа в заголовок Authorization. Токен доступа помещается в заголовок Authorization, если значение true, и в заголовок X-Access-Token, если значение false.
set_id_token_headertrueПередавать ли ID-токен в заголовке запроса X-ID-Token.
set_userinfo_headertrueПередавать ли информацию о пользователе в заголовке запроса X-Userinfo.
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_ISSUER}/.well-known/openid-configuration", "scope":"openid profile", "bearer_only":false, "realm":"master", "introspection_endpoint_auth_method":"client_secret_post", "redirect_uri":"http://127.0.0.1:9080/" } }, "upstream":{ "type":"roundrobin", "nodes":{ "httpbin.org:80":1 } } }'

Проверка

  1. Перейдите по адресу "http://127.0.0.1:9080/get", и страница будет перенаправлена на страницу входа Okta, так как плагин OpenID Connect включен. visit Okta login page

  2. Введите имя пользователя и пароль для аккаунта Okta и нажмите "Sign In", чтобы войти в свой аккаунт Okta.

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

    "X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****", "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****", "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"

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

X-Access-Token

X-Id-Token: Apache APISIX получит Id-токен от провайдера пользователя через кодировку base64 и поместит его в заголовок запроса X-Id-Token. Вы можете выбрать, включать ли эту функцию через 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 вышестоящему серверу. Вышестоящий сервер может разобрать эти заголовки, чтобы получить информацию о пользователе и метаданные.

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

О Okta

Okta — это настраиваемое, безопасное и готовое решение для добавления услуг аутентификации и авторизации в ваши приложения. Получите масштабируемую аутентификацию, встроенную прямо в ваше приложение, без затрат на разработку, рисков безопасности и обслуживания, связанных с самостоятельным кодированием. Вы можете подключить любое приложение на любом языке или стеке к Okta и определить, как вы хотите, чтобы ваши пользователи входили в систему. Каждый раз, когда пользователь пытается пройти аутентификацию, Okta проверит его личность и отправит необходимую информацию обратно в ваше приложение.

О Apache APISIX

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

Сотни компаний по всему миру используют Apache APISIX, включая финансы, интернет, производство, розничную торговлю, операторов, таких как NASA, Европейская цифровая фабрика, TravelSky, Tencent, Huawei, Weibo, China Mobile, Taikang, 360 и другие.

Github: https://github.com/apache/apisix

Сайт: https://apisix.apache.org

Tags: