Freigegebene Casbin APIs
Einführung
Gehen wir davon aus, dass die Frontend-Anwendung Ihres Anwendungssystems das access_token
des eingeloggten Benutzers erhalten hat und nun den Benutzer für einen Zugriff authentifizieren möchte. Sie können das access_token
nicht einfach in den HTTP-Anfrageheader einfügen, um diese APIs zu nutzen, da Casdoor das Feld Authorization
verwendet, um die Zugriffsberechtigung zu prüfen. Wie bei anderen APIs, die von Casdoor bereitgestellt werden, besteht das Feld Authorization
aus der Anwendungskunden-ID und dem Geheimnis, unter Verwendung des Basic HTTP Authentication Scheme. Es sieht aus wie Authorization: Basic <Ihre_Anwendungs_ClientId> <Ihr_Anwendungs_ClientSecret>
. Aus diesem Grund sollten Casbin APIs vom Anwendungsserver im Backend aufgerufen werden. Hier sind die Schritte, wie man es macht.
Nehmen Sie zum Beispiel die Anwendung app-vue-python-example auf der Demoseite, der Autorisierungsheader sollte sein: Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d
.
- Das Frontend übergibt das
access_token
über den HTTP-Anfrageheader an den Backend-Server. - Der Backend-Server ruft die Benutzer-ID aus dem
access_token
ab.
Als Vorabinformation, diese Schnittstellen sind auch (vorerst) für das (sub, obj, act)
Modell konzipiert. Die permissionId
in den URL-Parametern ist die Identität der angewandten Berechtigungspolitik, die aus dem Organisationsnamen und dem Namen der Berechtigungspolitik besteht (d.h., Organisationsname/Berechtigungsname
). Der Body ist das von dem Casbin-Modell der Berechtigung definierte Anfrageformat, das üblicherweise sub
, obj
und act
repräsentiert.
Neben der API-Schnittstelle zur Anforderung der Durchsetzung von Berechtigungskontrollen bietet Casdoor auch andere Schnittstellen, die externen Anwendungen helfen, Informationen über Berechtigungspolitiken zu erhalten, die hier ebenfalls aufgeführt sind.
Durchsetzen
Anfrage:
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"]'
Antwort:
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": null
}
BatchEnforce
Anfrage:
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"]]'
Antwort:
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": null
}
GetAllObjects
Anfrage:
curl --location --request GET 'http://localhost:8000/api/get-all-objects' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Antwort:
[
"app-built-in"
]
GetAllActions
Anfrage:
curl --location --request GET 'http://localhost:8000/api/get-all-actions' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Antwort:
[
"read",
"write",
"admin"
]
GetAllRoles
Anfrage:
curl --location --request GET 'http://localhost:8000/api/get-all-roles' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
Antwort:
[
"role_kcx66l"
]