Ověření požadavku GraphQL

PLATÍ PRO: Všechny úrovně služby API Management

Tato validate-graphql-request zásada ověří požadavek GraphQL a autorizuje přístup ke konkrétním cestám dotazů v rozhraní GraphQL API. Neplatný dotaz je chyba požadavku. Autorizace se provádí jenom u platných požadavků.

Poznámka:

Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady služby API Management.

Prohlášení o zásadách

<validate-graphql-request error-variable-name="variable name" max-size="size in bytes" max-depth="query depth">
    <authorize>
        <rule path="query path, for example: '/listUsers' or '/__*'" action="string or policy expression that evaluates to 'allow | remove | reject | ignore'" />
    </authorize>
</validate-graphql-request>

Atributy

Atribut Popis Požaduje se Výchozí
error-variable-name Název proměnné context.Variables , do které se protokoluje chyby ověření. Výrazy zásad jsou povolené. No
max-size Maximální velikost datové části požadavku v bajtech Maximální povolená hodnota: 102 400 bajtů (100 kB). (Pokud potřebujete tento limit zvýšit, obraťte se na podporu .) Výrazy zásad jsou povolené. Yes
maximální hloubka Celé číslo. Maximální hloubka dotazu. Výrazy zásad jsou povolené. No 6

Elementy

Název Popis Povinní účastníci
Povolit Přidejte tento prvek pro nastavení odpovídajícího autorizačního pravidla pro jednu nebo více cest. No
Pravidlo Přidejte jeden nebo více těchto prvků pro autorizaci konkrétních cest k dotazům. Každé pravidlo může volitelně zadat jinou akci. Lze zadat podmíněně pomocí výrazu zásad. No

atributy pravidla

Atribut Popis Požaduje se Výchozí
path Cesta k provedení ověřování autorizace. Musí se řídit vzorem: /type/field. Yes
action Akce , která se má provést, pokud se pravidlo použije. Lze zadat podmíněně pomocí výrazu zásad. No Povolit

Systém introspekce

Zásada pro path=/__* je systém introspekce . Můžete ho použít k odmítnutí požadavků introspekce (__schemaatd __type.).

Akce žádosti

Dostupné akce jsou popsány v následující tabulce.

Akce Popis
Odmítnout Dojde k chybě požadavku a požadavek se neodesílají do back-endu. Další pravidla, pokud nejsou nakonfigurována, nejsou použita.
remove Dojde k chybě pole a pole se z požadavku odebere.
Povolit Pole se předá back-endu.
ignorovat Toto pravidlo není platné pro tento případ a použije se další pravidlo.

Využití

Poznámky k využití

  • Nakonfigurujte zásadu pro předávací nebo syntetické rozhraní GraphQL API, které bylo importováno do služby API Management.

  • Tuto zásadu je možné v oddílu zásad použít jenom jednou.

  • Vzhledem k tomu, že dotazy GraphQL používají ploché schéma, můžou být oprávnění použita na libovolném uzlu typu výstupu typu list:

    • Mutační, dotaz nebo předplatné
    • Jednotlivá pole v deklaraci typu

    Oprávnění se nedají použít pro:

    • Vstupní typy
    • Fragmenty
    • Sjednocení
    • Rozhraní
    • Element schématu

Zpracování chyb

Selhání ověření schématu GraphQL nebo selhání velikosti nebo hloubky požadavku je chyba požadavku a výsledkem je selhání požadavku s blokem chyb (ale bez bloku dat).

Podobně jako u Context.LastError vlastnosti se všechny chyby ověřování GraphQL automaticky rozšíří do GraphQLErrors proměnné. Pokud je potřeba chyby rozšířit samostatně, můžete zadat název proměnné chyby. Chyby se nasdílí do error proměnné a GraphQLErrors proměnné.

Příklady

Ověření dotazu

V tomto příkladu platí následující ověřovací a autorizační pravidla pro dotaz GraphQL:

  • Žádosti větší než 100 kB nebo s hloubkou dotazu větší než 4 jsou odmítnuty.
  • Požadavky na systém introspekce jsou odmítnuty.
  • Pole /Missions/name se odebere z požadavků obsahujících více než dvě hlavičky.
<validate-graphql-request error-variable-name="name" max-size="102400" max-depth="4"> 
    <authorize>
        <rule path="/__*" action="reject" /> 
        <rule path="/Missions/name" action="@(context.Request.Headers.Count > 2 ? "remove" : "allow")" />
    </authorize>
</validate-graphql-request> 

Ověřování na nátěr

V tomto příkladu platí následující ověřovací a autorizační pravidla pro mutaci GraphQL:

  • Žádosti větší než 100 kB nebo s hloubkou dotazu větší než 4 jsou odmítnuty.
  • Požadavky na ztlumení deleteUser pole jsou odepřeny s výjimkou případů, kdy požadavek pochází z IP adresy 198.51.100.1.
<validate-graphql-request error-variable-name="name" max-size="102400" max-depth="4"> 
    <authorize>
        <rule path="/Mutation/deleteUser" action="@(context.Request.IpAddress <> "198.51.100.1" ? "deny" : "allow")" />
    </authorize>
</validate-graphql-request> 

Další informace o práci se zásadami najdete v tématech: