หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
Authorizer User-Defined Functions (UDF) ให้คุณเรียกใช้ตรรกะการให้สิทธิ์แบบกําหนดเองก่อนที่คําขอ GraphQL API จะได้รับการประมวลผล ความสามารถนี้ช่วยให้เจ้าของ API สามารถบังคับใช้กฎการเข้าถึงเฉพาะธุรกิจที่นอกเหนือไปจากการกําหนดบทบาทแบบคงที่ เมื่อใช้ Authorizer UDF คุณจะประเมินข้อมูลจากคําขอที่ตรวจสอบสิทธิ์แล้ว เช่น การอ้างสิทธิ์ในโทเค็น JSON Web Token (JWT) และตัดสินใจว่าควรอนุญาตคําขอหรือไม่ ตรรกะถูกนําไปใช้เป็นฟังก์ชันและเรียกใช้โดยอัตโนมัติสําหรับการเรียก API ขาเข้า
กรณีการใช้งาน
ใช้ฟังก์ชันข้อมูลผู้ใช้ของผู้ให้สิทธิ์เมื่อคุณต้องการ:
- ใช้ตรรกะทางธุรกิจแบบกําหนดเองก่อนดําเนินการ API
- จํากัดการเข้าถึงตามข้อมูลประจําตัวของผู้ใช้หรือการอ้างสิทธิ์โทเค็น
- ตรวจสอบความถูกต้องของบริการหลักแยกต่างหากจากบัญชีผู้ใช้
วิธีการทํางานของฟีเจอร์การให้สิทธิ์
เมื่อเปิดใช้งานการให้สิทธิ์แบบกําหนดเองด้วยฟังก์ชันข้อมูลผู้ใช้:
- ฟังก์ชันจะทํางานก่อนที่ GraphQL API จะทํางาน
- ได้รับบริบทจากคําขอที่รับรองความถูกต้อง
- ตรรกะแบบกําหนดเองจะตรวจสอบการอนุญาต
- คําขอ API จะดําเนินการต่อไปหากการให้สิทธิ์สําเร็จ มิฉะนั้นจะถูกปฏิเสธ
- ผลลัพธ์จะเกิดขึ้นได้เร็วขึ้นสําหรับคําขอในอนาคต
สร้างฟังก์ชันข้อมูลผู้ใช้
ฟังก์ชันผู้ให้สิทธิ์ภายในฟังก์ชันข้อมูลผู้ใช้ Fabric จําเป็นต้องมีรูปแบบเฉพาะ
- ชื่อฟังก์ชันสามารถกําหนดโดยผู้ใช้ได้ ไม่มีข้อจํากัดเฉพาะของ GraphQL และควรกําหนดตามข้อจํากัดของฟังก์ชันข้อมูลผู้ใช้
- อาร์กิวเมนต์ฟังก์ชัน/ชื่อพารามิเตอร์ควรถูกร้องขอและควรเป็นพจนานุกรมประเภท เมื่อบริการ GraphQL เรียกใช้ฟังก์ชัน บริการจะส่งเพย์โหลดที่มีพจนานุกรมที่เรียกว่าคําขอด้วยฟิลด์ต่อไปนี้:
- tokenClaims (พจนานุกรม): คู่คีย์-ค่าที่มีการอ้างสิทธิ์โทเค็นที่แยกจากโทเค็นผู้ใช้ขาเข้า
- query(string): สตริงการสืบค้นที่ส่งผ่านเมื่อมีการเรียกใช้ GraphQL API
- variables(dictionary): คู่คีย์-ค่าที่มีตัวแปรที่ส่งผ่านเมื่อมีการเรียกใช้ GraphQL API
-
ประเภทการส่งคืน (พจนานุกรม): ฟังก์ชันจะส่งกลับ
isAuthorizedและrolesrolesเป็นทางเลือกและจําเป็นต้องส่งเมื่อเปิดใช้งานคุณสมบัติ RBAC
ตัวอย่าง
สร้างฟังก์ชันข้อมูลผู้ใช้ในพอร์ทัล Fabric อัปเดตรหัสฟังก์ชันด้วยฟังก์ชันตัวให้สิทธิ์ตัวอย่างนี้
from typing import TYPE_CHECKING
import fabric.functions as fn
import logging
user data function = fn.UserDataFunctions()
@user data function.function()
def invokeauthudf(request: dict) -> dict:
token_claims: dict = request.get("tokenClaims", {})
query: str = request.get("query", "")
variables: dict = request.get("variables", {})
domain = "onmicrosoft.com"
spn = "<SPN-ID>"
# Extract claims from token_claims dictionary
tid_claim = token_claims.get("tid")
upn_claim = token_claims.get("upn")
appid_claim = token_claims.get("appid")
logging.info(f"Query: {query}");
logging.info(f"Claims: {token_claims}");
logging.info(f"Tenant: {tid_claim}");
logging.info(f"UPN: {upn_claim}");
logging.info(f"SPN: {appid_claim}");
# Authorization logic
## Optional: Do role-based access check
roles = []
if upn_claim is not None:
is_authorized = domain in upn_claim
roles = ["Default"]
else:
is_authorized = spn in appid_claim
roles = ["SPN"]
logging.info(f"Authorized: {is_authorized}")
logging.info(f"Roles: {roles}")
logging.info(f"SPN: {spn}")
logging.info(f"App ID: {appid_claim}")
return {
"isAuthorized": is_authorized,
"roles": roles
}
ฟังก์ชันนี้ทําหน้าที่อะไร?
- ฟังก์ชันข้อมูลผู้ใช้ Authorizer นี้จะทํางานก่อนที่คําขอ GraphQL จะดําเนินการ อ่านการอ้างสิทธิ์ข้อมูลประจําตัว (UPN, รหัสแอป) จากโทเค็น JSON Web Token (JWT) ของผู้เรียก และบันทึกรายละเอียดคําขอ
- โดยให้สิทธิ์ผู้ใช้โดยการตรวจสอบว่าอีเมล (UPN) ของพวกเขาเป็นของโดเมนเฉพาะหรือไม่ และให้สิทธิ์บริการหลักโดยการจับคู่รหัสแอปที่รู้จัก
- ตามผลลัพธ์ จะส่งกลับ isAuthorized
เพิ่มการเชื่อมต่อกับฟังก์ชันข้อมูลผู้ใช้
ก่อนเปิดใช้งานคุณลักษณะ คุณต้องเพิ่มการเชื่อมต่อสําหรับชนิดฟังก์ชันข้อมูลผู้ใช้
- ภายใต้ การตั้งค่า ให้เลือก จัดการการเชื่อมต่อและเกตเวย์
- บนแท็บ การเชื่อมต่อ ให้เลือก สร้าง
- ในหน้า การเชื่อมต่อใหม่ ให้เลือก คลาวด์ ระบุชื่อสําหรับการเชื่อมต่อของคุณ และเลือก ฟังก์ชันข้อมูลผู้ใช้ เป็นประเภทการเชื่อมต่อ ใช้เมธอด OAUth และอัปเดตข้อมูลประจําตัวเพื่อรับรองความถูกต้อง คุณไม่จําเป็นต้องเลือก "อนุญาตให้ใช้การเชื่อมต่อนี้กับเกตเวย์ข้อมูลภายในองค์กรหรือเกตเวย์ข้อมูล VNet" เมื่อสร้างการเชื่อมต่อนี้
เปิดใช้งานคุณลักษณะการให้สิทธิ์
เปิดใช้งานคุณสมบัติการอนุญาตเมื่อตั้งค่าฟังก์ชันและการเชื่อมต่อสําหรับฟังก์ชันข้อมูลผู้ใช้ประเภทนี้แล้ว คุณต้องมีสิทธิ์ในการเขียนเพื่อเปิดหรือปิดใช้งานคุณลักษณะนี้
- เปิดรายการ API สําหรับ GraphQL แล้วเลือกการตั้งค่า
- เลือก การให้สิทธิ์ (พรีวิว) และเปิดใช้งานคุณลักษณะ
- ระบุรายการฟังก์ชันข้อมูลผู้ใช้และฟังก์ชันการตรวจสอบสิทธิ์ที่คุณต้องการใช้
ข้อจํากัดและพฤติกรรม
| ประเภท | ราย ละเอียด |
|---|---|
| การรับรองความถูกต้อง | รองรับเฉพาะ OAuth เท่านั้น |
| รองรับ B2B | ไม่สามารถใช้ได้กับผู้ใช้ทั่วไปเนื่องจากข้อจํากัดในการเชื่อมต่อ |
| Permissions | เขียนที่จําเป็นสําหรับการกําหนดค่า ดําเนินการที่จําเป็นสําหรับการเรียก API |
| การกําหนดค่าที่ไม่รองรับ | ไม่รองรับ SPN ที่มีตัวระบุวัตถุ (OID) |
| Caching | การเปลี่ยนแปลงอาจใช้เวลาถึง 15 นาทีในการนําไปใช้ |
| การขึ้นต่อกันของภูมิภาค | UDF และ GraphQL ต้องอยู่ในภูมิภาคเดียวกัน |
| ลิงค์ส่วนตัว | ไม่รองรับการเข้าถึงแบบสาธารณะที่ถูกบล็อก |
| ความล้มเหลวในการให้สิทธิ์ | คําขอล้มเหลวเมื่อ isAuthorized เป็นเท็จ หรือเมื่อเปิดใช้งาน RBAC และบทบาทที่ส่งคืนหายไปหรือไม่ตรงกับบทบาทที่กําหนดค่าไว้ |
| การจัดการบทบาท | เมื่อเปิดใช้งาน RBAC ฟังก์ชันจะต้องส่งคืนบทบาท ระบบจะใช้เฉพาะบทบาทที่ตรงกันแรกเท่านั้น |