Проверка запроса 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 | Правило недопустимо для этого случая, и применяется следующее правило. |
Использование
- Разделы политики: inbound.
- Области политики: глобальная, рабочая область, продукт, API
- Шлюзы: классическая, версия 2, потребление, локальное размещение, рабочая область
Примечания об использовании
Настройте политику для сквозного или искусственного 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>
Связанные политики
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- Создание политик с помощью Microsoft Copilot в Azure