Saltar al contenido principal

APISIX

Actualmente, hay 2 métodos para usar Casdoor para conectarse a APISIX a través de los plugins de APISIX y proteger las APIs detrás de APISIX: usando el plugin de Casdoor de APISIX o usando el plugin OIDC de APISIX.

Conectar Casdoor a través del plugin de Casdoor de APISIX

Este plugin, authz-casdoor, puede proteger las APIs detrás de APISIX, forzando que cada solicitud se autentique sin modificar el código de la API.

Cómo habilitarlo

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

En este ejemplo, creamos una ruta "/anything/*" apuntando a "httpbin.org:80" usando la API de administración de APISIX, con el plugin "authz-casdoor" habilitado. Esta ruta ahora está bajo la protección de autenticación de Casdoor.

Atributos

NombreTipoRequisitoPredeterminadoVálidoDescripción
endpoint_addrcadenarequeridoLa URL de Casdoor.
client_idcadenarequeridoEl ID de cliente en Casdoor.
client_secretcadenarequeridoEl secreto de cliente en Casdoor.
callback_urlcadenarequeridoLa URL de callback que se utiliza para recibir el estado y el código.

endpoint_addr y callback_url no deben terminar con '/'

The "authz-casdoor" plugin has four parameters.

El primero es "callback_url". Esta es la URL de callback en OAuth2. Se debe enfatizar que esta URL de callback debe pertenecer al "uri" que especificaste para la ruta. For example, in this example, http://localhost:9080/anything/callback obviously belongs to "/anything/*". Solo de esta manera, la visita hacia el callback_url puede ser interceptada y utilizada por el plugin (para que el plugin pueda obtener el código y el estado en OAuth2). La lógica del callback_url está implementada completamente por el plugin, por lo que no hay necesidad de modificar el servidor para implementar este callback.

El segundo parámetro "endpoint_addr" es obviamente la URL de Casdoor. The third and fourth parameters are "client_id" and "client_secret", obtained from Casdoor when registering an application.

¿Cómo funciona?

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). Considerando que "authz-casdoor" está habilitado, esta visita sería procesada por el plugin "authz-casdoor" primero. Después de verificar la sesión y confirmar que este usuario no ha sido autenticado, la visita será interceptada. Con la URL original que el usuario quiere visitar conservada, serán redirigidos a la página de inicio de sesión de Casdoor.

Después de iniciar sesión exitosamente con un nombre de usuario y contraseña (o cualquier método que utilicen), Casdoor redirigirá a este usuario al "callback_url" con los parámetros GET "code" y "state" especificados. Debido a que el "callback_url" es conocido por el plugin, cuando la visita hacia el "callback_url" sea interceptada esta vez, se activará la lógica del "Authorization code Grant Flow" en OAuth2. Esto significa que el plugin solicitará el token de acceso para confirmar si este usuario realmente ha iniciado sesión. Después de esta confirmación, el plugin redirigirá a este usuario a la URL original que querían visitar, la cual fue conservada por nosotros previamente. El estado de inicio de sesión también se mantendrá en la sesión.

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. De esta manera, el usuario puede visitar lo que quiera bajo esta ruta sin ser interferido.

Conectar Casdoor a través del plugin OIDC de APISIX

Casdoor puede usar el protocolo OIDC para conectarse a APISIX, y este documento te mostrará cómo hacerlo.

Los siguientes son algunos de los nombres utilizados en la configuración:

CASDOOR_HOSTNAME: Nombre de dominio o IP donde se despliega el servidor de Casdoor.

APISIX_HOSTNAME: Nombre de dominio o IP donde se despliega APISIX.

Paso 1: Desplegar Casdoor y APISIX

Deploy Casdoor and APISIX. After deployment, ensure:

  1. Casdoor se puede iniciar sesión y usar normalmente.
  2. Establece el valor de origin de Casdoor (conf/app.conf) a CASDOOR_HOSTNAME. Casdoor conf

Paso 2: Configurar la aplicación Casdoor

  1. Crea una nueva aplicación Casdoor o usa una existente.
  2. Añade una URL de redirección: http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT, y reemplaza REDIRECTWHATYOUWANT con la URL de redirección deseada.
  3. Selecciona "JWT-Empty" para la opción de formato de Token.
  4. Añade el proveedor deseado y configura otros ajustes.

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

Paso 3: Configurar APISIX

APISIX tiene soporte oficial de OIDC, que se implementa usando 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