Поделиться через


Проверка запроса GraphQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API

Политика validate-graphql-request проверяет запрос GraphQL и разрешает доступ к определенным путям запросов в API GraphQL. Недопустимый запрос приведет к "ошибке запроса". Авторизация выполняется только для допустимых запросов.

Примечание.

Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Узнайте, как устанавливать или изменять политики службы управления API.

Правило политики

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

Атрибуты

Атрибут Description Обязательное поле По умолчанию.
error-variable-name Имя переменной в context.Variables, где регистрируются ошибки проверки. Допустимы выражения политики. No Н/П
max-size Максимальный размер полезных данных запроса в байтах. Максимально допустимое значение: 102 400 байт (100 КБ). (Обратитесь в службу поддержки , если необходимо увеличить это ограничение.) Допустимы выражения политики. Да Н/П
максимальная глубина Целое число. Максимальная глубина запроса. Допустимы выражения политики. No 6

Элементы

Имя Описание Обязательное поле
Авторизация Добавьте этот элемент, чтобы задать соответствующее правило авторизации для одного или нескольких путей. No
для исходящего трафика Добавьте один или несколько из этих элементов, чтобы авторизовать определенные пути запроса. Каждое правило может дополнительно предоставить другое действие. Можно указать условно с помощью выражения политики. No

Атрибуты правила

Атрибут Description Обязательное поле По умолчанию.
path Путь для выполнения проверки авторизации. Он должен соответствовать такому шаблону: /type/field. Да Н/П
действие Действие, которое нужно выполнить, если правило применяется. Можно указать условно с помощью выражения политики. No allow

Система интроспекции

Политика для path=/__* — это система интроспекции. Ее можно использовать для отклонения запросов интроспекции (__schema, __typeи т. д.).

Действия запроса

Доступные действия описаны в таблице ниже.

Действие Description
отвергать Возникает ошибка запроса, и запрос не отправляется в серверную часть. Если настроены дополнительные правила, они не применяются.
remove Произошла ошибка поля, и поле удаляется из запроса.
allow Поле передается в серверную часть.
ignore Правило недопустимо для этого случая, и применяется следующее правило.

Использование

Примечания об использовании

  • Настройте политику для сквозного или искусственного API GraphQL, импортированного в Управление API.

  • Эту политику можно использовать только один раз в разделе политики.

  • Так как запросы GraphQL используют неструктурированную схему, разрешения могут применяться на любом конечном узле выходного типа:

    • изменение, запрос или подписка;
    • Отдельное поле в объявлении типа

    Разрешения нельзя применять к:

    • Типы входных данных
    • Фрагменты
    • Объединения
    • Интерфейсы
    • Элемент схемы

Обработка ошибок

Сбой проверки на соответствие схеме GraphQL или сбой для размера или глубины запроса является ошибкой запроса и приводит к сбою запроса с блоком ошибок (но без блока данных).

Как и свойство Context.LastError, все ошибки проверки GraphQL автоматически распространяются в переменной GraphQLErrors. Если ошибки необходимо распространять отдельно, можно указать имя переменной ошибки. Ошибки отправляются в переменную error и переменную GraphQLErrors.

Примеры

Проверка запросов

В этом примере применяются следующие правила проверки и авторизации к запросу GraphQL:

  • Запросы размером более 100 КБ или с глубиной запроса больше 4 отклоняются.
  • Запросы к системе интроспекции отклоняются.
  • Поле /Missions/name удаляется из запросов, содержащих более двух заголовков.
<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> 

Проверка мутаций

В этом примере применяются следующие правила проверки и авторизации к мутации GraphQL:

  • Запросы размером более 100 КБ или с глубиной запроса больше 4 отклоняются.
  • Запросы на изменение поля deleteUser отклоняются, за исключением случаев, когда запрос получен с IP-адреса 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> 

Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.