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

APISIX

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

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

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

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

Specify this plugin when creating the route and fill the required fields. Example:

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 не повинні закінчуватися на '/'

The "authz-casdoor" plugin has four parameters.

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

Другий параметр "endpoint_addr" очевидно є URL Casdoor. The third and fourth parameters are "client_id" and "client_secret", obtained from Casdoor when registering an application.

Як це працює?

Suppose a new user who has never visited this route before is going to visit it (http://localhost:9080/anything/d?param1=foo&param2=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, який він хотів відвідати, який ми раніше зберегли. Статус входу також буде збережено в сесії.

Next time this user wants to visit the URL behind this route (for example, http://localhost:9080/anything/d), after discovering that this user has been authenticated previously, this plugin won't redirect this user anymore. Таким чином, користувач може відвідувати все, що він хоче під цим маршрутом, без перешкод.

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

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

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

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

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

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

Deploy Casdoor and APISIX. After deployment, ensure:

  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. Додайте бажаного провайдера та налаштуйте інші параметри.

Application Setting Note Client ID and Client Secret for the next step. OIDC discovery: http://<CASDOOR_HOSTNAME>/.well-known/openid-configuration.

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

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

Customize settings per APISIX OIDC. Example routing:

# 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
}
}
}'

Visit http://APISIX_HOSTNAME/get; the browser redirects to the Casdoor login page. After login, the request is forwarded to httpbin.org as in the screenshot. APISIX_Result