Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Το Authorizer User-Defined Functions (UDF) σάς επιτρέπει να εκτελείτε προσαρμοσμένη λογική εξουσιοδότησης πριν από την επεξεργασία ενός αιτήματος API GraphQL. Αυτή η δυνατότητα επιτρέπει στους κατόχους API να επιβάλλουν κανόνες πρόσβασης για συγκεκριμένες επιχειρήσεις που υπερβαίνουν τις στατικές αναθέσεις ρόλων. Με ένα UDF Authorizer, μπορείτε να αξιολογήσετε πληροφορίες από το αίτημα με έλεγχο ταυτότητας, όπως αξιώσεις σε ένα διακριτικό JSON Web Token (JWT), και να αποφασίσετε αν το αίτημα θα πρέπει να επιτραπεί. Η λογική υλοποιείται ως συνάρτηση και καλείται αυτόματα για εισερχόμενες κλήσεις API.
Περιπτώσεις χρήσης
Χρησιμοποιήστε μια λειτουργία δεδομένων χρήστη εξουσιοδοτητή όταν χρειάζεται:
- Εφαρμόστε προσαρμοσμένη επιχειρηματική λογική πριν από την εκτέλεση του API
- Περιορισμός πρόσβασης με βάση την ταυτότητα χρήστη ή τις αξιώσεις διακριτικού
- Επικύρωση κύριας υπηρεσίας ξεχωριστά από λογαριασμούς χρηστών
Πώς λειτουργεί η λειτουργία εξουσιοδότησης
Όταν η προσαρμοσμένη εξουσιοδότηση είναι ενεργοποιημένη με μια λειτουργία δεδομένων χρήστη:
- Μια συνάρτηση εκτελείται πριν από την εκτέλεση του GraphQL API.
- Λαμβάνει το πλαίσιο από το αίτημα με έλεγχο ταυτότητας.
- Η προσαρμοσμένη λογική ελέγχει την εξουσιοδότηση.
- Το αίτημα API προχωρά εάν η εξουσιοδότηση είναι επιτυχής, διαφορετικά απορρίπτεται.
- Το αποτέλεσμα επιτυγχάνεται πιο γρήγορα για μελλοντικά αιτήματα.
Δημιουργία συνάρτησης δεδομένων χρήστη
Μια συνάρτηση authorizer μέσα σε μια συνάρτηση δεδομένων χρήστη Fabric απαιτεί μια συγκεκριμένη μορφή.
- Το όνομα της συνάρτησης μπορεί να οριστεί από το χρήστη. Δεν έχει περιορισμούς ειδικά για το GraphQL και θα πρέπει να ορίζεται με βάση τους περιορισμούς της συνάρτησης δεδομένων χρήστη.
- Το όρισμα/όνομα παραμέτρου συνάρτησης θα πρέπει να είναι request και θα πρέπει να είναι λεξικού τύπου. Όταν η υπηρεσία GraphQL καλεί μια συνάρτηση, στέλνει ένα ωφέλιμο φορτίο που περιέχει ένα λεξικό που ονομάζεται αίτημα με τα ακόλουθα πεδία:
- tokenClaims (λεξικό): ζεύγη κλειδιών-τιμών που περιέχουν αξιώσεις token που εξάγονται από το εισερχόμενο token χρήστη.
- query(string): η συμβολοσειρά ερωτήματος που μεταβιβάζεται όταν καλείται το GraphQL API.
- μεταβλητές (λεξικό): ζεύγη κλειδιών-τιμών που περιέχουν μεταβλητές που μεταβιβάζονται όταν καλείται το GraphQL API.
-
Τύπος επιστροφής (λεξικό): Η συνάρτηση στέλνει πίσω
isAuthorizedκαιroles.rolesείναι προαιρετικό και πρέπει να αποσταλεί όταν είναι ενεργοποιημένη η λειτουργία RBAC.
Παράδειγμα
Δημιουργήστε μια συνάρτηση δεδομένων χρήστη στο Fabric portal. Ενημερώστε τον κώδικα συνάρτησης με αυτό το δείγμα συνάρτησης εξουσιοδότησης.
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.
Προσθήκη σύνδεσης στη συνάρτηση Δεδομένα χρήστη
Πριν ενεργοποιήσετε τη δυνατότητα, πρέπει να προσθέσετε μια σύνδεση για έναν τύπο συνάρτησης δεδομένων χρήστη.
- Στην περιοχή ρυθμίσεις , επιλέξτε Διαχείριση συνδέσεων και πυλών.
- Στην καρτέλα Συνδέσεις , επιλέξτε Δημιουργία.
- Στη σελίδα Νέα σύνδεση , επιλέξτε Cloud, δώστε ένα όνομα για τη σύνδεσή σας και επιλέξτε Συνάρτηση δεδομένων χρήστη ως τύπο σύνδεσης. Χρησιμοποιήστε τη μέθοδο OAUth και ενημερώστε τα διαπιστευτήρια για έλεγχο ταυτότητας. Δεν χρειάζεται να επιλέξετε "Να επιτρέπεται η χρήση αυτής της σύνδεσης είτε με πύλες δεδομένων εσωτερικής εγκατάστασης είτε με πύλες δεδομένων VNet" κατά τη δημιουργία αυτής της σύνδεσης.
Ενεργοποίηση της δυνατότητας εξουσιοδότησης
Ενεργοποιήστε τη δυνατότητα εξουσιοδότησης μόλις ρυθμιστεί η λειτουργία και η σύνδεση για αυτόν τον τύπο λειτουργίας δεδομένων χρήστη. Χρειάζεστε δικαιώματα εγγραφής για να ενεργοποιήσετε ή να απενεργοποιήσετε αυτήν τη δυνατότητα.
- Ανοίξτε το στοιχείο API για GraphQL και επιλέξτε Ρυθμίσεις.
- Επιλέξτε Εξουσιοδότηση (Προεπισκόπηση) και ενεργοποιήστε τη δυνατότητα.
- Δώστε το στοιχείο συνάρτησης δεδομένων χρήστη και τη συνάρτηση ελέγχου ταυτότητας που θέλετε να χρησιμοποιήσετε.
Περιορισμοί και συμπεριφορές
| Κατηγορία | Λεπτομέρειες |
|---|---|
| Έλεγχος ταυτότητας | Υποστηρίζεται μόνο το OAuth |
| Υποστήριξη B2B | Δεν είναι διαθέσιμο για χρήστες-επισκέπτες λόγω περιορισμών σύνδεσης |
| Δικαιώματα | Απαιτείται εγγραφή για τη διαμόρφωση. Απαιτείται εκτέλεση για κλήσεις API |
| Μη υποστηριζόμενες ρυθμίσεις παραμέτρων | Το SPN με αναγνωριστικό αντικειμένου (OID) δεν υποστηρίζεται |
| Caching | Οι αλλαγές ενδέχεται να χρειαστούν έως και 15 λεπτά για να εφαρμοστούν |
| Εξάρτηση περιοχής | Το UDF και το GraphQL πρέπει να βρίσκονται στην ίδια περιοχή |
| Ιδιωτικός σύνδεσμος | Δεν υποστηρίζεται με αποκλεισμένη δημόσια πρόσβαση |
| Αποτυχίες εξουσιοδότησης | Οι αιτήσεις αποτυγχάνουν όταν isAuthorized είναι ψευδές ή όταν το RBAC είναι ενεργοποιημένο και οι ρόλοι που επιστρέφονται λείπουν ή δεν ταιριάζουν με έναν ρυθμισμένο ρόλο. |
| Χειρισμός ρόλων | Όταν είναι ενεργοποιημένο το RBAC, η συνάρτηση πρέπει να επιστρέφει ρόλους. Εφαρμόζεται μόνο ο πρώτος ρόλος που ταιριάζει. |