Validera GraphQL-begäran

GÄLLER FÖR: Alla API Management-nivåer

Principen validate-graphql-request validerar GraphQL-begäran och ger åtkomst till specifika frågesökvägar i ett GraphQL-API. En ogiltig fråga är ett "begärandefel". Auktorisering görs endast för giltiga begäranden.

Kommentar

Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. Läs mer om hur du anger eller redigerar API Management-principer.

Principuttryck

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

Attribut

Attribut beskrivning Obligatoriskt Standardvärde
error-variable-name Namnet på variabeln i context.Variables för att logga valideringsfel till. Principuttryck tillåts. Nej Ej tillämpligt
maxstorlek Maximal storlek på nyttolasten för begäran i byte. Högsta tillåtna värde: 102 400 byte (100 KB). (Kontakta supporten om du behöver öka den här gränsen.) Principuttryck tillåts. Ja Ej tillämpligt
maxdjup Ett heltal. Maximalt frågedjup. Principuttryck tillåts. Nej 6

Element

Name beskrivning Obligatoriskt
Tillåta Lägg till det här elementet för att ange en lämplig auktoriseringsregel för en eller flera sökvägar. Nej
Regel Lägg till ett eller flera av dessa element för att auktorisera specifika frågesökvägar. Varje regel kan också ange en annan åtgärd. Kan anges villkorsstyrt med hjälp av ett principuttryck. Nej

regelattribut

Attribut beskrivning Obligatoriskt Standardvärde
path Sökväg för att köra auktoriseringsverifiering på. Den måste följa mönstret: /type/field. Ja Ej tillämpligt
åtgärd Åtgärd att utföra om regeln gäller. Kan anges villkorsstyrt med hjälp av ett principuttryck. Nej Tillåta

Introspektionssystem

Principen för path=/__* är introspektionssystemet. Du kan använda den för att avvisa introspektionsbegäranden (__schema, __typeosv.).

Begär åtgärder

Tillgängliga åtgärder beskrivs i följande tabell.

Åtgärd beskrivning
Avvisa Ett begärandefel inträffar och begäran skickas inte till serverdelen. Ytterligare regler om de har konfigurerats tillämpas inte.
ta bort Ett fältfel inträffar och fältet tas bort från begäran.
Tillåta Fältet skickas till serverdelen.
Ignorera Regeln är inte giltig för det här fallet och nästa regel tillämpas.

Användning

Användningsanteckningar

  • Konfigurera principen för ett direkt- eller syntetiskt GraphQL-API som har importerats till API Management.

  • Den här principen kan bara användas en gång i ett principavsnitt.

  • Eftersom GraphQL-frågor använder ett utplattat schema kan behörigheter tillämpas på valfri lövnod av en utdatatyp:

    • Mutation, fråga eller prenumeration
    • Enskilt fält i en typdeklaration

    Behörigheter kanske inte tillämpas på:

    • Indatatyper
    • Fragment
    • Fackföreningar
    • Gränssnitt
    • Schemaelementet

Felhantering

Det går inte att verifiera mot GraphQL-schemat, eller ett fel för begärans storlek eller djup, är ett begärandefel och resulterar i att begäran misslyckas med ett felblock (men inget datablock).

Precis som egenskapen Context.LastError sprids alla GraphQL-valideringsfel automatiskt i variabeln GraphQLErrors . Om felen måste spridas separat kan du ange ett felvariabelnamn. Fel skickas till variabeln error och variabeln GraphQLErrors .

Exempel

Frågeverifiering

Det här exemplet tillämpar följande verifierings- och auktoriseringsregler på en GraphQL-fråga:

  • Begäranden som är större än 100 kb eller med frågedjup större än 4 avvisas.
  • Begäranden till introspektionssystemet avvisas.
  • Fältet /Missions/name tas bort från begäranden som innehåller fler än två rubriker.
<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> 

Verifiering av mutation

Det här exemplet tillämpar följande verifierings- och auktoriseringsregler på en GraphQL-mutation:

  • Begäranden som är större än 100 kb eller med frågedjup större än 4 avvisas.
  • Begäranden om att mutera fältet deleteUser nekas förutom när begäran kommer från IP-adressen 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> 

Mer information om hur du arbetar med principer finns i: