เปิดเผย Casbin APIs
บทนำ
มาสมมติว่าแอปพลิเคชันหน้าบ้านของคุณได้รับ access_token
ของผู้ใช้ที่เข้าสู่ระบบแล้ว และตอนนี้ต้องการตรวจสอบสิทธิ์การเข้าถึงของผู้ใช้ คุณไม่สามารถวาง access_token
ลงในส่วนหัวของคำขอ HTTP เพื่อใช้ API เหล่านี้ได้ เพราะ Casdoor ใช้ฟิลด์ Authorization
เพื่อตรวจสอบสิทธิ์การเข้าถึง เหมือนกับ API อื่นๆ ที่ Casdoor ให้บริการ, ฟิลด์ Authorization
ประกอบด้วย id และ secret ของแอปพลิเคชัน, โดยใช้ Basic HTTP Authentication Scheme มันดูเหมือน Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>
ด้วยเหตุผลนี้, Casbin APIs ควรถูกเรียกใช้โดยเซิร์ฟเวอร์แบ็กเอนด์ของแอปพลิเคชัน นี่คือขั้นตอนวิธีการทำ
เอาแอปพลิเคชัน app-vue-python-example ในเว็บไซต์ตัวอย่างเป็นตัวอย่าง, ส่วนหัวการอนุญาตควรเป็น: Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d
- หน้าบ้านส่ง
access_token
ไปยังเซิร์ฟเวอร์แบ็กเอนด์ผ่านส่วนหัวของคำขอ HTTP - เซิร์ฟเวอร์แบ็กเอนด์ดึง user id จาก
access_token
เป็นหมายเหตุล่วงหน้า, อินเทอร์เฟซเหล่านี้ยังถูกออกแบบ (ในตอนนี้) สำหรับโมเดล (sub, obj, act)
ค่า permissionId
ในพารามิเตอร์ URL เป็นตัวตนของนโยบายสิทธิ์ที่ใช้, ประกอบด้วยชื่อองค์กรและชื่อนโยบายสิทธิ์ (เช่น, ชื่อองค์กร/ชื่อสิทธิ์
) เนื้อหาคือรูปแบบคำขอที่กำหนดโดยโมเดล Casbin ของสิทธิ์, โดยปกติแสดงถึง sub
, obj
และ act
ตามลำดับ
นอกจากอินเทอร์เฟซ API สำหรับการขอบังคับใช้การควบคุมสิทธิ์แล้ว, Casdoor ยังมีอินเทอร์เฟซอื่นๆ ที่ช่วยให้แอปพลิเคชันภายนอกได้รับข้อมูลนโยบายสิทธิ์, ซึ่งก็มีการแสดงรายการที่นี่ด้วย
บังคับใช้
คำขอ:
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"]'
คำตอบ:
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": null
}
BatchEnforce
คำขอ:
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"]]'
คำตอบ:
{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": null
}
GetAllObjects
คำขอ:
curl --location --request GET 'http://localhost:8000/api/get-all-objects' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
คำตอบ:
[
"app-built-in"
]
GetAllActions
คำขอ:
curl --location --request GET 'http://localhost:8000/api/get-all-actions' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
คำตอบ:
[
"read",
"write",
"admin"
]
GetAllRoles
คำขอ:
curl --location --request GET 'http://localhost:8000/api/get-all-roles' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'
คำตอบ:
[
"role_kcx66l"
]