Перейти до основного вмісту

APISIX

Наразі існує 2 методи використання Casdoor для підключення до APISIX через плагіни APISIX та захисту API за APISIX: використання плагіну Casdoor в APISIX або використання плагіну OIDC в APISIX.

Підключіть Casdoor через плагін Casdoor в APISIX

Цей плагін, authz-casdoor, може захищати API за APISIX, змушуючи кожен окремий запит аутентифікуватися без зміни коду API.

Як це увімкнути

Вам потрібно вказати цей плагін при створенні маршруту та надати всі необхідні поля. Ось приклад.

curl "http://127.0.0.1:9180/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"methods": ["GET"],
"uri": "/anything/*",
"plugins": {
"authz-casdoor": {
"endpoint_addr":"http://localhost:8000",
"callback_url":"http://localhost:9080/anything/callback",
"client_id":"7ceb9b7fda4a9061ec1c",
"client_secret":"3416238e1edf915eac08b8fe345b2b95cdba7e04"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

У цьому прикладі ми створили маршрут "/anything/*", який вказує на "httpbin.org:80" за допомогою адміністративного API APISIX, з увімкненим плагіном "authz-casdoor". Цей маршрут тепер під захистом аутентифікації Casdoor.

Атрибути

Ім'яТипВимогаЗа замовчуваннямДійснийОпис
endpoint_addrрядокобов'язковийURL Casdoor.
client_idрядокобов'язковийКлієнтський ID в Casdoor.
client_secretрядокобов'язковийКлієнтський секрет в Casdoor.
callback_urlрядокобов'язковийCallback URL, який використовується для отримання state та code.

endpoint_addr та callback_url не повинні закінчуватися на '/'

У конфігурації плагіну "authz-casdoor" ми можемо побачити чотири параметри.

Перший це "callback_url". Це callback URL в OAuth2. Слід підкреслити, що цей callback URL обов'язково має належати до "uri", який ви вказали для маршруту. Наприклад, у цьому прикладі, http://localhost:9080/anything/callback очевидно належить до "/anything/*". Тільки так візит до callback_url може бути перехоплений та використаний плагіном (щоб плагін міг отримати code та state в OAuth2). Логіка callback_url повністю реалізована плагіном, тому немає потреби змінювати сервер для реалізації цього callback.

Другий параметр "endpoint_addr" очевидно є URL Casdoor. Третій та четвертий параметри - це "client_id" та "client_secret", які ви можете отримати в Casdoor при реєстрації додатку.

Як це працює?

Припустимо, новий користувач, який ніколи раніше не відвідував цей маршрут, збирається його відвідати (http://localhost:9080/anything/d?param1=foom2=bar). Враховуючи, що увімкнено "authz-casdoor", цей візит спочатку буде оброблено плагіном "authz-casdoor". Після перевірки сесії та підтвердження, що цей користувач не був аутентифікований, візит буде перехоплено. Зберігаючи оригінальний URL, який користувач хотів відвідати, він буде перенаправлений на сторінку входу Casdoor.

Після успішного входу з ім'ям користувача та паролем (або яким-небудь іншим методом), Casdoor перенаправить цього користувача на "callback_url" з GET параметрами "code" та "state". Оскільки "callback_url" відомий плагіну, коли візит до "callback_url" перехоплюється цього разу, буде запущена логіка "Authorization code Grant Flow" в OAuth2. Це означає, що плагін запитає access token, щоб підтвердити, чи цей користувач дійсно увійшов. Після цього підтвердження плагін перенаправить цього користувача на оригінальний URL, який він хотів відвідати, який ми раніше зберегли. Статус входу також буде збережено в сесії.

Наступного разу, коли цей користувач захоче відвідати URL за цим маршрутом (наприклад, http://localhost:9080/anything/d), після виявлення, що цей користувач був раніше аутентифікований, плагін більше не буде перенаправляти цього користувача. Таким чином, користувач може відвідувати все, що він хоче під цим маршрутом, без перешкод.

Підключіть Casdoor через плагін OIDC в APISIX

Casdoor може використовувати протокол OIDC для підключення до APISIX, і цей документ покаже вам, як це зробити.

Нижче наведено деякі з назв, які використовуються в конфігурації:

CASDOOR_HOSTNAME: Доменне ім'я або IP, де розгорнуто сервер Casdoor.

APISIX_HOSTNAME: Доменне ім'я або IP, де розгорнуто APISIX.

Крок 1: Розгортання Casdoor та APISIX

Спочатку розгорніть Casdoor та APISIX.

Після успішного розгортання вам потрібно забезпечити:

  1. Casdoor можна увійти та використовувати в звичайному режимі.
  2. Встановіть значення origin для Casdoor (conf/app.conf) на CASDOOR_HOSTNAME. Casdoor conf

Крок 2: Налаштування додатку Casdoor

  1. Створіть новий додаток Casdoor або використовуйте існуючий.
  2. Додайте URL перенаправлення: http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT, і замініть REDIRECTWHATYOUWANT на бажаний URL перенаправлення.
  3. Виберіть опцію формату токена "JWT-Empty".
  4. Додайте бажаного провайдера та налаштуйте інші параметри.

Налаштування додатку На сторінці налаштувань додатку ви знайдете значення Client ID та Client Secret, як показано на зображенні вище. Ми використаємо їх на наступному кроці.

Відкрийте улюблений браузер і відвідайте: http://CASDOOR_HOSTNAME/.well-known/openid-configuration, де ви знайдете конфігурацію OIDC Casdoor.

Крок 3: Налаштування APISIX

APISIX має офіційну підтримку OIDC, яка реалізована за допомогою lua-resty-openidc.

Ви можете налаштувати параметри відповідно до документації APISIX OIDC. Будуть використані наступні налаштування маршрутизації:

# Use your own X-Api-Key
$ curl -X POST APISIX_HOSTNAME/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
"uri": "/get",
"name": "apisix_casdoor_test",
"plugins": {
"openid-connect": {
"client_id": "Client ID",
"client_secret": "Client Secret",
"discovery": "http://CASDOOR_HOSTNAME/.well-known/openid-configuration",
"introspection_endpoint_auth_method": "client_secret_basic",
"logout_path": "/logout",
"realm": "master",
"redirect_uri": "http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT",
"bearer_only": false,
"set_id_token_header": false,
"access_token_in_authorization_header": true,
"set_access_token_header": true,
"set_userinfo_header": false,
"realm": "master"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

Тепер відвідайте http://APISIX_HOSTNAME/get, і браузер перенаправить вас на сторінку входу Casdoor. Після успішного входу ви побачите, що запит було відправлено на httpbin.org, як показано на скріншоті нижче. APISIX_Result