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ły 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. Umożliwić swobodne otworzenie

System introspekcji

Zasady dla path=/__* to system introspekcji . Można go użyć do odrzucania żądań introspekcji (__schema, __typeitp.).

Akcje żądania

Dostępne akcje opisano w poniższej tabeli.

Akcja opis
Odrzucić 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.
Umożliwić swobodne otworzenie Pole jest przekazywane do zaplecza.
ignoruj Reguła jest nieprawidłowa dla tego przypadku, a następna reguła jest stosowana.

Użycie

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 adresu 198.51.100.1IP .
<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> 

Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz: