Weryfikowanie żądania GraphQL
DOTYCZY: Wszystkie warstwy usługi API Management
Zasady validate-graphql-request
weryfikują żądanie GraphQL i autoryzuje dostęp do określonych ścieżek zapytań w interfejsie API GraphQL. Nieprawidłowe zapytanie to "błąd żądania". Autoryzacja jest wykonywana tylko dla prawidłowych żądań.
Uwaga
Ustaw elementy zasad i elementy podrzędne w kolejności podanej w instrukcji zasad. Dowiedz się więcej na temat ustawiania lub edytowania zasad usługi API Management.
Instrukcja zasad
<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>
Atrybuty
Atrybut | opis | Wymagani | Wartość domyślna |
---|---|---|---|
error-variable-name | Nazwa zmiennej w pliku , context.Variables aby rejestrować błędy walidacji. Wyrażenia zasad są dozwolone. |
Nie. | Nie dotyczy |
maksymalny rozmiar | Maksymalny rozmiar ładunku żądania w bajtach. Maksymalna dozwolona wartość: 102 400 bajtów (100 KB). (Skontaktuj się z pomocą techniczną , jeśli musisz zwiększyć ten limit). Wyrażenia zasad są dozwolone. | Tak | Nie dotyczy |
maksymalna głębokość | Całkowitą. Maksymalna głębokość zapytania. Wyrażenia zasad są dozwolone. | Nie. | 6 |
Elementy
Nazwa/nazwisko | opis | Wymagania |
---|---|---|
Autoryzować | Dodaj ten element, aby ustawić odpowiednią regułę autoryzacji dla co najmniej jednej ścieżki. | Nie. |
reguła | Dodaj co najmniej jeden z tych elementów, aby autoryzować określone ścieżki zapytania. Każda reguła może opcjonalnie określić inną akcję. Można określić warunkowo przy użyciu wyrażenia zasad. | Nie. |
atrybuty reguły
Atrybut | opis | Wymagani | Wartość domyślna |
---|---|---|---|
path | Ścieżka do wykonania weryfikacji autoryzacji. Musi ona być zgodna ze wzorcem: /type/field . |
Tak | Nie dotyczy |
action | Akcja do wykonania, jeśli reguła ma zastosowanie. Można określić warunkowo przy użyciu wyrażenia zasad. | Nie. | pozwolić |
System introspekcji
Zasady dla path=/__*
to system introspekcji . Można go użyć do odrzucania żądań introspekcji (__schema
, __type
itp.).
Akcje żądania
Dostępne akcje opisano w poniższej tabeli.
Akcja | opis |
---|---|
odrzucać | Występuje błąd żądania, a żądanie nie jest wysyłane do zaplecza. Dodatkowe reguły, jeśli nie zostały skonfigurowane, nie są stosowane. |
remove | Występuje błąd pola, a pole jest usuwane z żądania. |
pozwolić | Pole jest przekazywane do zaplecza. |
ignoruj | Reguła jest nieprawidłowa dla tego przypadku, a następna reguła jest stosowana. |
Użycie
- Sekcje zasad: ruch przychodzący
- Zakresy zasad: globalny, obszar roboczy, produkt, interfejs API
- Bramy: klasyczne, v2, zużycie, self-hosted, obszar roboczy
Uwagi dotyczące użycia
Skonfiguruj zasady dla przekazywanego lub syntetycznego interfejsu API GraphQL zaimportowanego do usługi API Management.
Te zasady można użyć tylko raz w sekcji zasad.
Ponieważ zapytania GraphQL używają spłaszczonego schematu, uprawnienia mogą być stosowane w dowolnym węźle liścia typu danych wyjściowych:
- Mutacja, zapytanie lub subskrypcja
- Pojedyncze pole w deklaracji typu
Uprawnienia mogą nie być stosowane do:
- Typy danych wejściowych
- Fragmenty
- Unie
- Interfejsy
- Element schematu
Obsługa błędów
Niepowodzenie weryfikacji względem schematu GraphQL lub niepowodzenie rozmiaru lub głębokości żądania jest błędem żądania i powoduje niepowodzenie żądania z blokiem błędów (ale bez bloku danych).
Podobnie jak we Context.LastError
właściwości, wszystkie błędy walidacji języka GraphQL są automatycznie propagowane w zmiennej GraphQLErrors
. Jeśli błędy muszą być propagowane oddzielnie, możesz określić nazwę zmiennej błędu. Błędy są wypychane do zmiennej error
i zmiennej GraphQLErrors
.
Przykłady
Sprawdzanie poprawności zapytań
W tym przykładzie stosuje się następujące reguły walidacji i autoryzacji do zapytania GraphQL:
- Żądania większe niż 100 KB lub z głębokością zapytania większą niż 4 są odrzucane.
- Żądania do systemu introspekcji są odrzucane.
- Pole
/Missions/name
jest usuwane z żądań zawierających więcej niż dwa nagłówki.
<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>
Walidacja mutacji
W tym przykładzie stosuje się następujące reguły walidacji i autoryzacji do mutacji GraphQL:
- Żądania większe niż 100 KB lub z głębokością zapytania większą niż 4 są odrzucane.
- Żądania mutacji
deleteUser
pola są odrzucane z wyjątkiem sytuacji, gdy żądanie pochodzi z adresu198.51.100.1
IP .
<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>
Powiązane zasady
Powiązana zawartość
Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz:
- Samouczek: przekształcanie i ochrona interfejsu API
- Dokumentacja zasad dla pełnej listy instrukcji zasad i ich ustawień
- Wyrażenia zasad
- Ustawianie lub edytowanie zasad
- Ponowne używanie konfiguracji zasad
- Repozytorium fragmentów zasad
- Tworzenie zasad przy użyciu rozwiązania Microsoft Copilot na platformie Azure