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
.
- El front-end pasa el
access_token
al servidor backend a través del encabezado de la solicitud HTTP. - 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"
]