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¶m2=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. Таким чином, користувач може відвідувати все, що він хоче під цим маршрутом, без перешкод.