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 |
---|---|---|
autorizovat | 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 (__schema
atd __type
.).
Akce žádosti
Dostupné akce jsou popsány v následující tabulce.
Akce | Popis |
---|---|
odmítat | 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í
- Oddíly zásad: příchozí
- Obory zásad: globální, pracovní prostor, produkt, rozhraní API
- Brány: Classic, v2, consumption, self-host, workspace
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
Zásady můžou ověřovat požadavky GraphQL s až 250 poli dotazu napříč všemi úrovněmi.
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 adresy198.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>
Související zásady
Související obsah
Další informace o práci se zásadami najdete v tématech:
- Kurz: Transformace a ochrana rozhraní API
- Referenční informace o zásadách pro úplný seznam prohlášení o zásadách a jejich nastavení
- Výrazy zásad
- Nastavení nebo úprava zásad
- Opakované použití konfigurací zásad
- Úložiště fragmentů zásad
- Sada nástrojů zásad služby Azure API Management
- Vytváření zásad pomocí Microsoft Copilotu v Azure