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

Necesitas especificar este plugin al crear la ruta y proporcionar todos los campos requeridos. Aquí hay un ejemplo.

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

En la configuración del plugin "authz-casdoor", podemos ver cuatro parámetros.

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. Por ejemplo, en este ejemplo, http://localhost:9080/anything/callback obviamente pertenece a "/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. El tercer y cuarto parámetros son "client_id" y "client_secret", los cuales puedes obtener de Casdoor cuando registras una aplicación.

¿Cómo funciona?

Supongamos que un nuevo usuario que nunca ha visitado esta ruta antes va a visitarla (http://localhost:9080/anything/d?param1=foom2=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.

La próxima vez que este usuario quiera visitar la URL detrás de esta ruta (por ejemplo, http://localhost:9080/anything/d), después de descubrir que este usuario ha sido autenticado previamente, este plugin no redirigirá a este usuario más. 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

Primero, despliega Casdoor y APISIX.

Después de un despliegue exitoso, necesitas asegurarte:

  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.

Configuración de la Aplicación En la página de configuración de la aplicación, encontrarás los valores de Client ID y Client Secret como se muestra en la imagen de arriba. Los usaremos en el siguiente paso.

Abre tu navegador favorito y visita: http://CASDOOR_HOSTNAME/.well-known/openid-configuration, donde encontrarás la configuración OIDC de Casdoor.

Paso 3: Configurar APISIX

APISIX tiene soporte oficial de OIDC, que se implementa usando lua-resty-openidc.

Puedes personalizar los ajustes de acuerdo con la documentación OIDC de APISIX. Se utilizarán los siguientes ajustes de enrutamiento:

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

Ahora, visita http://APISIX_HOSTNAME/get, y el navegador te redirigirá a la página de inicio de sesión de Casdoor. Después de iniciar sesión exitosamente, verás que se ha enviado una solicitud a httpbin.org como se muestra en la captura de pantalla a continuación. APISIX_Result