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 |
---|---|---|
bemyndiga | 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
, __type
osv.).
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. |
bortse från | Regeln är inte giltig för det här fallet och nästa regel tillämpas. |
Användning
- Principavsnitt: inkommande
- Principomfattningar: global, arbetsyta, produkt, API
- Gatewayer: klassisk, v2, förbrukning, lokalt installerad, arbetsyta
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-adressen198.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>
Relaterade principer
Relaterat innehåll
Mer information om hur du arbetar med principer finns i:
- Självstudie: Transformera och skydda ditt API
- Principreferens för en fullständig lista över principinstruktioner och deras inställningar
- Principuttryck
- Ange eller redigera principer
- Återanvända principkonfigurationer
- Lagringsplats för principfragment
- Skapa principer med Microsoft Copilot i Azure