Saltar al contenido principal

APIs expuestas de Casbin

Introducción

Supongamos que el front-end de tu aplicación ha obtenido el access_token del usuario que ha iniciado sesión y ahora quiere autenticar al usuario para algún acceso. No puedes simplemente colocar el access_token en el encabezado de la solicitud HTTP para usar estas APIs porque Casdoor utiliza el campo Authorization para verificar el permiso de acceso. Como cualquier otra API proporcionada por Casdoor, el campo Authorization consiste en el id del cliente de la aplicación y el secreto, utilizando el Esquema de Autenticación HTTP Básico. Parece Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>. Por esta razón, las APIs de Casbin deben ser llamadas por el servidor backend de la aplicación. Aquí están los pasos sobre cómo hacerlo.

Toma como ejemplo la aplicación app-vue-python-example en el sitio de demostración, el encabezado de autorización debería ser: Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d.

  1. El front-end pasa el access_token al servidor backend a través del encabezado de la solicitud HTTP.
  2. El servidor backend recupera el id del usuario del access_token.

Como nota previa, estas interfaces también están diseñadas (por ahora) para el modelo (sub, obj, act). El permissionId en los parámetros de la URL es la identidad de la política de permisos aplicada, que consiste en el nombre de la organización y el nombre de la política de permisos (es decir, nombre de la organización/nombre del permiso). El cuerpo es el formato de solicitud definido por el modelo Casbin del permiso, que generalmente representa sub, obj y act respectivamente.

Además de la interfaz API para solicitar la ejecución del control de permisos, Casdoor también proporciona otras interfaces que ayudan a las aplicaciones externas a obtener información de la política de permisos, que también se enumera aquí.

Hacer cumplir

Solicitud:

curl --location --request POST 'http://localhost:8000/api/enforce?permissionId=example-org/example-permission' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '["example-org/example-user", "example-resource", "example-action"]'

Respuesta:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": null
}

BatchEnforce

Solicitud:

curl --location --request POST 'http://localhost:8000/api/batch-enforce?permissionId=example-org/example-permission' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '[["example-org/example-user", "example-resource", "example-action"], ["example-org/example-user2", "example-resource", "example-action"], ["example-org/example-user3", "example-resource", "example-action"]]'

Respuesta:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": null
}

GetAllObjects

Solicitud:

curl --location --request GET 'http://localhost:8000/api/get-all-objects' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

Respuesta:

[
"app-built-in"
]

GetAllActions

Solicitud:

curl --location --request GET 'http://localhost:8000/api/get-all-actions' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

Respuesta:

[
"read",
"write",
"admin"
]

GetAllRoles

Solicitud:

curl --location --request GET 'http://localhost:8000/api/get-all-roles' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

Respuesta:

[
"role_kcx66l"
]