Egyéni engedélyezés felhasználói adatfüggvényekkel a GraphQL API-hoz (előzetes verzió)

Az Engedélyezési User-Defined Functions (UDF-ek) lehetővé teszik egyéni engedélyezési logika végrehajtását a GraphQL API-kérések feldolgozása előtt. Ez a funkció lehetővé teszi az API-tulajdonosok számára a statikus szerepkör-hozzárendeléseken túlmutató, üzletspecifikus hozzáférési szabályok kikényszerítését. Az engedélyező UDF-ekkel kiértékelheti a hitelesített kérelem adatait – például egy JSON-webjogkivonatban (JWT) lévő jogcímeket –, és eldöntheti, hogy engedélyezni kell-e a kérést. A logikát függvényként implementáljuk, és automatikusan meghívjuk a bejövő API-hívásokhoz.

Használati esetek

Ha a következőkre van szüksége, használjon egy hitelesítő felhasználói adatfüggvényt:

  • Egyéni üzleti logika alkalmazása API-végrehajtás előtt
  • Hozzáférés korlátozása felhasználói identitás vagy jogkivonat jogcíme alapján
  • Szolgáltatási főazonosító érvényesítése a felhasználói fiókoktól elkülönítve

Az engedélyezési funkció működése

Ha az egyéni engedélyezés engedélyezve van egy felhasználói adatfüggvénnyel:

  • Egy függvény a GraphQL API végrehajtása előtt fut.
  • Kontextust kap a hitelesített kérelemből.
  • Az egyéni logika ellenőrzi az engedélyezést.
  • Az API-kérés akkor folytatódik, ha az engedélyezés sikeres, ellenkező esetben a rendszer megtagadja.
  • Az eredmény gyorsabban érhető el a jövőbeli kérések esetében.

Felhasználói adatfüggvény létrehozása

Egy Fabric felhasználói adatfüggvényen belüli engedélyező függvénynek egy adott formátumra van szüksége.

  1. A függvény neve felhasználó által definiálható. Nem rendelkezik GraphQL-specifikus korlátozásokkal, és a felhasználói adatfüggvények korlátozásai alapján kell meghatározni.
  2. A függvényargumentum/paraméter nevének kérelemnek kell lennie, és szótár típusúnak kell lennie. Amikor a GraphQL szolgáltatás meghív egy függvényt, egy terhet küld, ami egy kérés nevű szótárt tartalmaz a következő mezőkkel:
    • tokenClaims (szótár): a bejövő felhasználói jogkivonatból kinyert jogcímeket tartalmazó kulcs-érték párok.
    • query(string): a GraphQL API meghívásakor átadott lekérdezési sztring.
    • változók (szótár): a GraphQL API meghívásakor átadott változókat tartalmazó kulcs-érték párok.
    • Visszatérési típus (szótár): A függvény visszaadja a(z) isAuthorized és roles értékeket. roles nem kötelező, és az RBAC-funkció engedélyezésekor el kell küldeni.

Example

Felhasználói adatfüggvény létrehozása Fabric portálon. Frissítse a függvénykódot ezzel a mintául szolgáló engedélyező függvénnyel.

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
    }

Mit tesz ez a függvény?

  • Ez az engedélyező felhasználói adatfüggvény a GraphQL-kérés végrehajtása előtt fut, beolvassa az identitásjogcímeket (UPN, alkalmazásazonosító) a hívó JSON-webjogkivonatából (JWT) és naplózza a kérelmek részleteit.
  • Engedélyezi a felhasználókat azzal, hogy ellenőrzi, hogy az e-mail-címük (UPN) egy adott tartományhoz tartozik-e, és egy ismert alkalmazásazonosítóval való egyeztetéssel engedélyezi a szolgáltatásnevek engedélyezését.
  • Az eredmény alapján visszatér az isAuthorized érték.

Kapcsolat hozzáadása a Felhasználói adatok függvényhez

A funkció engedélyezése előtt hozzá kell adnia egy kapcsolatot egy felhasználói adat függvény típushoz.

  1. A Beállítások területen válassza a Kapcsolatok és átjárók kezelése lehetőséget.
  2. A Kapcsolatok lapon válassza az Új lehetőséget.
  3. Az Új kapcsolat lapon válassza a Felhő lehetőséget, adja meg a kapcsolat nevét, és válassza a Felhasználói adatok függvényt kapcsolattípusként. Használja az OAUth metódust , és frissítse a hitelesítő adatokat a hitelesítéshez. A kapcsolat létrehozásakor nem kell ellenőriznie a "Kapcsolat használatának engedélyezése helyszíni adatátjárókkal vagy virtuális hálózati adatátjárókkal" jelölőnégyzetet.

Az engedélyezési funkció engedélyezése

Engedélyezze az engedélyezési funkciót, miután a függvény és a felhasználói adatfunkció típus kapcsolata be lett állítva. A funkció engedélyezéséhez vagy letiltásához írási engedélyekre van szüksége.

  1. Nyissa meg a GraphQL-hez készült API-t, és válassza a Beállítások lehetőséget.
  2. Válassza az Engedélyezés (előzetes verzió) lehetőséget, és engedélyezze a funkciót.
  3. Adja meg a felhasználói adatfüggvény elemét és a használni kívánt hitelesítési függvényt.

Korlátozások és viselkedés

Category Részletek
Authentication Csak az OAuth támogatott
B2B-támogatás Kapcsolatkorlátozások miatt nem érhető el a vendégfelhasználók számára
Permissions A konfigurációhoz írás szükséges; API-hívásokhoz futtatás szükséges.
Nem támogatott konfigurációk Az objektumazonosítóval (OID) rendelkező SPN nem támogatott
Gyorsítótár A módosítások alkalmazása akár 15 percet is igénybe vehet
Régiófüggőség Az UDF-nek és a GraphQL-nek ugyanabban a régióban kell lennie
Privát hivatkozás Nem érhető el a letiltott nyilvános hozzáféréssel
Engedélyezési hibák A kérelmek sikertelenek, ha isAuthorized hamis, vagy ha az RBAC engedélyezve van, és a visszaadott szerepkörök hiányoznak, vagy nem egyeznek meg egy konfigurált szerepkörrel.
Szerepkörkezelés Ha az RBAC engedélyezve van, a függvénynek szerepköröket kell visszaadnia. A rendszer csak az első egyező szerepkört alkalmazza.

Következő lépések