APIs Casbin exposées
Introduction
Supposons que le front-end de votre application a obtenu le access_token
de l'utilisateur connecté et souhaite maintenant authentifier l'utilisateur pour certains accès. Vous ne pouvez pas simplement placer le access_token
dans l'en-tête de la requête HTTP pour utiliser ces APIs car Casdoor utilise le champ Authorization
pour vérifier la permission d'accès. Comme toutes les autres APIs fournies par Casdoor, le champ Authorization
se compose de l'identifiant client de l'application et du secret, en utilisant le schéma d'authentification HTTP de base. Ça ressemble à Authorization: Basic <Votre_Application_ClientId> <Votre_Application_ClientSecret>
. Pour cette raison, les APIs Casbin doivent être appelées par le serveur backend de l'application. Voici les étapes à suivre.
Prenez l'application app-vue-python-example sur le site de démonstration par exemple, l'en-tête d'autorisation devrait être : Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d
.
- Le front-end transmet le
access_token
au serveur backend via l'en-tête de la requête HTTP. - Le serveur backend récupère l'identifiant de l'utilisateur à partir du
access_token
.
Comme note préalable, ces interfaces sont également conçues (pour l'instant) pour le modèle (sub, obj, act)
. Le permissionId
dans les paramètres de l'URL est l'identité de la politique de permission appliquée, qui se compose du nom de l'organisation et du nom de la politique de permission (c'est-à-dire, nom de l'organisation/nom de la permission
). Le corps est le format de requête défini par le modèle Casbin de la permission, représentant généralement sub
, obj
et act
respectivement.
En plus de l'interface API pour demander l'application du contrôle des permissions, Casdoor fournit également d'autres interfaces qui aident les applications externes à obtenir des informations sur la politique de permission, qui sont également listées ici.
Enforcer
Requête :
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"]'
Réponse :
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": null
}
BatchEnforce
Requête :
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"]]'
Réponse :
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": null
}
GetAllObjects
Requête :
curl --location --request GET 'http://localhost:8000/api/get-all-objects' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Réponse :
[
"app-built-in"
]
GetAllActions
Requête :
curl --location --request GET 'http://localhost:8000/api/get-all-actions' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Réponse :
[
"read",
"write",
"admin"
]
GetAllRoles
Requête :
curl --location --request GET 'http://localhost:8000/api/get-all-roles' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Réponse :
[
"role_kcx66l"
]