Zum Hauptinhalt springen

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.

  1. Das Frontend übergibt das access_token über den HTTP-Anfrageheader an den Backend-Server.
  2. 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"
]