Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ПРИМЕНИМО К: все уровни API Management
Политика validate-graphql-request проверяет запрос GraphQL и разрешает access определенным путям запросов в API GraphQL. Недопустимый запрос приведет к "ошибке запроса". Авторизация выполняется только для допустимых запросов.
Примечание.
Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Узнайте больше о как задать или изменить политики API Management.
Правило политики
<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>
Атрибуты
| Атрибут | Описание | Обязательное поле | По умолчанию. |
|---|---|---|---|
| error-variable-name | Имя переменной в context.Variables, где регистрируются ошибки проверки. Допустимы выражения политики. |
нет | Н/П |
| максимальный размер | Максимальный размер полезных данных запроса в байтах. Максимально допустимое значение: 102 400 байт (100 КБ). (Обратитесь к support если необходимо увеличить это ограничение.) Допустимы выражения политики. | Да | Н/П |
| максимальная глубина | Целое число. Максимальная глубина запроса. Допустимы выражения политики. | нет | 6 |
Элементы
| Имя | Описание | Обязательное поле |
|---|---|---|
| Авторизация | Добавьте этот элемент, чтобы задать соответствующее правило авторизации для одного или нескольких путей. | нет |
| для исходящего трафика | Добавьте один или несколько из этих элементов, чтобы авторизовать определенные пути запроса. Каждое правило может дополнительно предоставить другое действие. Можно указать условно с помощью выражения политики. Для каждого конечного поля GraphQL API Management вычисляет все правила сопоставления и применяет наиболее конкретное совпадение пути (например, /Query/listUsers переопределяет /Query/*). |
нет |
Атрибуты правила
| Атрибут | Описание | Обязательное поле | По умолчанию. |
|---|---|---|---|
| путь | Путь для выполнения проверки авторизации. Он должен соответствовать такому шаблону: /type/field. |
Да | Н/П |
| действие | Действие, которое нужно выполнить, если правило применяется. Можно указать условно с помощью выражения политики. | нет | разрешать |
Система интроспекции
Политика для path=/__* — это система интроспекции. Ее можно использовать для отклонения запросов интроспекции (__schema, __typeи т. д.).
Действия запроса
Доступные действия описаны в таблице ниже.
| Действие | Описание |
|---|---|
| отвергать | Возникает ошибка запроса, и запрос не отправляется в серверную часть. Если настроены дополнительные правила, они не применяются. |
| удалять | Произошла ошибка поля, и поле удаляется из запроса. |
| разрешать | Поле передается в серверную часть. |
| игнорировать | Правило недопустимо для этого случая, и применяется следующее правило. |
Использование
- Разделы политики: inbound.
- Области политики: глобальная, рабочая область, продукт, API
- Шлюзы: классическая, версия 2, потребление, локальное размещение, рабочая область
Примечания об использовании
Настройте политику для pass-through или synthetic API GraphQL, импортированного в API Management.
Эту политику можно использовать только один раз в разделе политики.
Так как запросы GraphQL используют неструктурированную схему, разрешения могут применяться на любом конечном узле выходного типа:
- изменение, запрос или подписка;
- Отдельное поле в объявлении типа
Разрешения нельзя применять к:
- Типы входных данных
- Фрагменты
- Объединения
- Интерфейсы
- Элемент схемы
Политика может проверять запросы GraphQL до 250 полей запросов на всех уровнях.
Обработка ошибок
Сбой проверки на соответствие схеме 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
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- репозиторий Policy snippets
- репозиторий Policy
- набор средств политики Azure API Management
- Get Copilot помощь в создании, объяснении и устранении неполадок политик