Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Autorisierer User-Defined Functions (UDFs) ermöglichen die Ausführung von benutzerdefinierter Autorisierungslogik , bevor eine GraphQL-API-Anforderung verarbeitet wird. Mit dieser Funktion können API-Besitzer geschäftsspezifische Zugriffsregeln erzwingen, die über statische Rollenzuweisungen hinausgehen. Mit einem Authorizer-UDF können Sie Informationen aus der authentifizierten Anfrage auswerten, z. B. Claims in einem JSON Web Token (JWT)-Token, und entscheiden, ob die Anfrage zulässig sein soll. Die Logik wird als Funktion implementiert und automatisch für eingehende API-Aufrufe aufgerufen.
Anwendungsfälle
Verwenden Sie eine Autorisierungsbenutzerdatenfunktion, wenn Sie Folgendes benötigen:
- Anwenden von benutzerdefinierter Geschäftslogik vor der API-Ausführung
- Einschränken des Zugriffs basierend auf Benutzeridentitäts- oder Tokenansprüchen
- Service Principal getrennt von Benutzerkonten validieren
Funktionsweise des Autorisierungsfeatures
Wenn die benutzerdefinierte Autorisierung mit einer Benutzerdatenfunktion aktiviert ist:
- Eine Funktion wird ausgeführt, bevor die GraphQL-API ausgeführt wird.
- Er empfängt Kontext von der authentifizierten Anforderung.
- Benutzerdefinierte Logik prüft die Autorisierung.
- Die API-Anforderung wird fortgesetzt, wenn die Autorisierung erfolgreich ist, andernfalls wird sie verweigert.
- Das Ergebnis wird für zukünftige Anforderungen schneller erreicht.
Erstellen einer Benutzerdatenfunktion
Eine Autorisierungsfunktion innerhalb einer Fabric Benutzerdatenfunktion erfordert ein bestimmtes Format.
- Der Funktionsname kann benutzerdefiniert werden. Es gibt keine GraphQL-spezifischen Einschränkungen und sollte basierend auf den Einschränkungen der Benutzerdatenfunktion definiert werden.
- Der Name des Funktionsarguments/Parameters sollte "request" sein, und er sollte vom Typ Wörterbuch sein. Wenn der GraphQL-Dienst eine Funktion aufruft, sendet er eine Nutzlast mit einem Wörterbuch namens Anforderung mit den folgenden Feldern:
- tokenClaims (Wörterbuch): Schlüsselwertpaare, die Tokenansprüche enthalten, die aus dem eingehenden Benutzertoken extrahiert wurden.
- query(string): Die beim Aufrufen der GraphQL-API übergebene Abfragezeichenfolge.
- variables(dictionary): Key-Value-Paare, die Variablen enthalten, die beim Aufrufen der GraphQL-API übergeben werden.
-
Rückgabetyp(Wörterbuch): Die Funktion sendet zurück
isAuthorized.
Example
Erstellen Sie eine Benutzerdatenfunktion im Fabric Portal. Aktualisieren Sie den Funktionscode mit dieser Beispiel-Autorisierungsfunktion.
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 = "59f4323d-c886-4eaf-b686-1219c4f380ab"
# 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
if upn_claim is not None:
is_authorized = domain in upn_claim
else:
is_authorized = spn in appid_claim
logging.info(f"Authorized: {is_authorized}")
logging.info(f"SPN: {spn}")
logging.info(f"App ID: {appid_claim}")
return {
"isAuthorized": is_authorized
}
Was macht diese Funktion?
- Diese Autorisierungsbenutzerdatenfunktion wird ausgeführt, bevor eine GraphQL-Anforderung ausgeführt wird, Identitätsansprüche (UPN, App-ID) aus dem JSON-Webtoken (JWT)-Token des Aufrufers liest und Anforderungsdetails protokolliert.
- Es autorisiert Benutzer, indem überprüft wird, ob ihre E-Mail (UPN) zu einer bestimmten Domäne gehört, und autorisiert Dienstprinzipale durch Abgleichen einer bekannten App-ID.
- Basierend auf dem Ergebnis wird "isAuthorized" zurückgegeben.
Hinzufügen einer Verbindung zur Benutzerdatenfunktion
Bevor Sie das Feature aktivieren, müssen Sie eine Verbindung für einen Benutzerdatenfunktionstyp hinzufügen.
- Wählen Sie unter "Einstellungen" die Option "Verbindungen und Gateways verwalten" aus.
- Wählen Sie auf der Registerkarte "Verbindungen " die Option "Neu" aus.
- Wählen Sie auf der Seite "Neue Verbindung" "Cloud" aus, geben Sie einen Namen für Ihre Verbindung ein, und wählen Sie "Benutzerdatenfunktion" als Verbindungstyp aus. Verwenden Sie die OAUth-Methode , und aktualisieren Sie die Anmeldeinformationen für die Authentifizierung. Sie müssen beim Erstellen dieser Verbindung nicht überprüfen, ob diese Verbindung mit lokalen Datengateways oder VNet-Datengateways verwendet werden kann.
Aktivieren des Autorisierungsfeatures
Aktivieren Sie das Autorisierungsfeature, sobald die Funktion und die Verbindung für diesen Benutzerdatenfunktionstyp eingerichtet wurde. Sie benötigen Schreibberechtigungen, um dieses Feature zu aktivieren oder zu deaktivieren.
- Öffnen Sie die API für das GraphQL-Element, und wählen Sie "Einstellungen" aus.
- Wählen Sie Autorisierung (Vorschau) aus, und aktivieren Sie das Feature.
- Geben Sie das Element der Benutzerdatenfunktion und die Authentifizierungsfunktion an, die Sie verwenden möchten.
Einschränkungen und Verhaltensweisen
| Kategorie | Details |
|---|---|
| Authentifizierung | Nur OAuth wird unterstützt. |
| B2B-Unterstützung | Aufgrund von Verbindungsbeschränkungen für Gastbenutzer nicht verfügbar |
| Erlaubnisse | Schreibvorgang erforderlich für die Konfiguration; Für API-Aufrufe erforderliche Ausführung |
| Nicht unterstützte Konfigurationen | SPN mit Objektbezeichner (OID) wird nicht unterstützt |
| Zwischenspeicherung | Es kann bis zu 15 Minuten dauern, bis Änderungen angewendet werden. |
| Regionsabhängigkeit | UDF und GraphQL müssen sich in derselben Region befinden |
| Privater Link | Nicht unterstützt mit blockierten öffentlichen Zugriffen |
| Autorisierungsfehler | Tritt auf, wenn isAuthorized auf false gesetzt ist |