GraphQL-aanvraag valideren

VAN TOEPASSING OP: Alle API Management-lagen

Het validate-graphql-request beleid valideert de GraphQL-aanvraag en autoriseert toegang tot specifieke querypaden in een GraphQL-API. Een ongeldige query is een aanvraagfout. Autorisatie wordt alleen uitgevoerd voor geldige aanvragen.

Notitie

Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Meer informatie over het instellen of bewerken van API Management-beleid.

Beleidsinstructie

<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>

Kenmerken

Kenmerk Beschrijving Vereist Standaardinstelling
error-variable-name De naam van de variabele waarin context.Variables validatiefouten moeten worden vastgelegd. Beleidsexpressies zijn toegestaan. Nee N.v.t.
maximale grootte Maximale grootte van de nettolading van de aanvraag in bytes. Maximaal toegestane waarde: 102.400 bytes (100 kB). (Neem contact op met de ondersteuning als u deze limiet wilt verhogen.) Beleidsexpressies zijn toegestaan. Ja N.v.t.
maximale diepte Een geheel getal. Maximale querydiepte. Beleidsexpressies zijn toegestaan. Nee 6

Elementen

Name Beschrijving Vereist
Machtigen Voeg dit element toe om een juiste autorisatieregel in te stellen voor een of meer paden. Nee
regel Voeg een of meer van deze elementen toe om specifieke querypaden te autoriseren. Elke regel kan desgewenst een andere actie opgeven. Kan voorwaardelijk worden opgegeven met behulp van een beleidsexpressie. Nee

regelkenmerken

Kenmerk Beschrijving Vereist Standaardinstelling
path Pad voor het uitvoeren van autorisatievalidatie op. Het moet het patroon volgen: /type/field. Ja N.v.t.
action Actie die moet worden uitgevoerd als de regel van toepassing is. Kan voorwaardelijk worden opgegeven met behulp van een beleidsexpressie. Nee Toestaan

Introspection systeem

Het beleid voor path=/__* is het introspection-systeem . U kunt deze gebruiken om introspectieaanvragen (__schema, __typeenzovoort) af te wijzen.

Aanvraagacties

Beschikbare acties worden beschreven in de volgende tabel.

Actie Beschrijving
Verwerpen Er treedt een aanvraagfout op en de aanvraag wordt niet naar de back-end verzonden. Aanvullende regels als deze zijn geconfigureerd, worden niet toegepast.
remove Er treedt een veldfout op en het veld wordt verwijderd uit de aanvraag.
Toestaan Het veld wordt doorgegeven aan de back-end.
Negeren De regel is niet geldig voor dit geval en de volgende regel wordt toegepast.

Gebruik

Gebruiksnotities

  • Configureer het beleid voor een passthrough - of synthetische GraphQL-API die is geïmporteerd in API Management.

  • Dit beleid kan slechts eenmaal worden gebruikt in een beleidssectie.

  • Omdat GraphQL-query's een plat schema gebruiken, kunnen machtigingen worden toegepast op elk bladknooppunt van een uitvoertype:

    • Mutatie, query of abonnement
    • Afzonderlijk veld in een typedeclaratie

    Machtigingen kunnen niet worden toegepast op:

    • Invoertypen
    • Fragmenten
    • Vakbonden
    • Interfaces
    • Het schema-element

Foutafhandeling

Het valideren van het GraphQL-schema of een fout voor de grootte of diepte van de aanvraag is een aanvraagfout en resulteert erin dat de aanvraag is mislukt met een foutenblok (maar geen gegevensblok).

Net als bij de Context.LastError eigenschap worden alle GraphQL-validatiefouten automatisch doorgegeven in de GraphQLErrors variabele. Als de fouten afzonderlijk moeten worden doorgegeven, kunt u een naam voor de foutvariabele opgeven. Fouten worden naar de error variabele en de GraphQLErrors variabele gepusht.

Voorbeelden

Queryvalidatie

In dit voorbeeld worden de volgende validatie- en autorisatieregels toegepast op een GraphQL-query:

  • Aanvragen die groter zijn dan 100 kB of met een querydiepte die groter is dan 4, worden geweigerd.
  • Aanvragen voor het introspectiesysteem worden geweigerd.
  • Het /Missions/name veld wordt verwijderd uit aanvragen met meer dan twee headers.
<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> 

Mutatievalidatie

In dit voorbeeld worden de volgende validatie- en autorisatieregels toegepast op een GraphQL-mutatie:

  • Aanvragen die groter zijn dan 100 kB of met een querydiepte die groter is dan 4, worden geweigerd.
  • Aanvragen voor het muteren van het deleteUser veld worden geweigerd, behalve wanneer de aanvraag afkomstig is van het IP-adres 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> 

Zie voor meer informatie over het werken met beleid: