Validar solicitação do GraphQL
APLICA-SE A: Todas as camadas de gerenciamento de API
A validate-graphql-request
política valida a solicitação do GraphQL e autoriza o acesso a caminhos de consulta específicos em uma API do GraphQL. Uma consulta inválida é um "erro de solicitação". A autorização só é feita para pedidos válidos.
Nota
Defina os elementos da política e os elementos filho na ordem fornecida na declaração de política. Saiba mais sobre como definir ou editar políticas de Gerenciamento de API.
Declaração de política
<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>
Atributos
Atributo | Description | Necessário | Predefinição |
---|---|---|---|
error-variable-name | Nome da variável em context.Variables para registrar erros de validação. São permitidas expressões de política. |
No | N/A |
tamanho-máximo | Tamanho máximo da carga útil da solicitação em bytes. Valor máximo permitido: 102.400 bytes (100 KB). (Entre em contato com o suporte se precisar aumentar esse limite.) São permitidas expressões de política. | Sim | N/A |
profundidade-máxima | Um inteiro. Profundidade máxima da consulta. São permitidas expressões de política. | Não | 6 |
Elementos
Nome | Descrição | Obrigatório |
---|---|---|
autorizar | Adicione este elemento para definir uma regra de autorização apropriada para um ou mais caminhos. | Não |
regra | Adicione um ou mais desses elementos para autorizar caminhos de consulta específicos. Cada regra pode, opcionalmente, especificar uma ação diferente. Pode ser especificado condicionalmente usando uma expressão de política. | Não |
atributos da regra
Atributo | Description | Necessário | Predefinição |
---|---|---|---|
path | Caminho para executar a validação de autorização. Deve seguir o padrão: /type/field . |
Sim | N/A |
action | Ação a executar se a regra se aplicar. Pode ser especificado condicionalmente usando uma expressão de política. | Não | permitir |
Sistema de introspeção
A política para path=/__*
é o sistema de introspeção . Você pode usá-lo para rejeitar solicitações de introspeção (__schema
, __type
, etc.).
Solicitar ações
As ações disponíveis são descritas na tabela a seguir.
Ação | Descrição |
---|---|
rejeitar | Acontece um erro de solicitação e a solicitação não é enviada para o back-end. Regras adicionais, se configuradas, não são aplicadas. |
remove | Ocorre um erro de campo e o campo é removido da solicitação. |
permitir | O campo é passado para o backend. |
ignorar | A regra não é válida para este caso e a regra seguinte é aplicada. |
Utilização
- Secções políticas: entrada
- Escopos de política: global, espaço de trabalho, produto, API
- Gateways: clássico, v2, consumo, auto-hospedado, espaço de trabalho
Notas de utilização
Configure a política para uma API GraphQL sintética ou de passagem que tenha sido importada para o Gerenciamento de API.
Esta política só pode ser utilizada uma vez numa secção de política.
Como as consultas GraphQL usam um esquema achatado, as permissões podem ser aplicadas em qualquer nó folha de um tipo de saída:
- Mutação, consulta ou subscrição
- Campo individual numa declaração de tipo
As permissões não podem ser aplicadas a:
- Tipos de entrada
- Fragmentos
- Sindicatos
- Interfaces
- O elemento do esquema
A política pode validar solicitações GraphQL com até 250 campos de consulta em todos os níveis.
Processamento de erros
A falha na validação em relação ao esquema GraphQL, ou uma falha no tamanho ou profundidade da solicitação, é um erro de solicitação e resulta na falha da solicitação com um bloco de erros (mas sem bloco de dados).
Semelhante à Context.LastError
propriedade, todos os erros de validação do GraphQL são propagados automaticamente na GraphQLErrors
variável. Se os erros precisarem ser propagados separadamente, você poderá especificar um nome de variável de erro. Os erros são empurrados para a error
variável e para a GraphQLErrors
variável.
Exemplos
Validação da consulta
Este exemplo aplica as seguintes regras de validação e autorização a uma consulta GraphQL:
- Solicitações maiores que 100 kb ou com profundidade de consulta maior que 4 são rejeitadas.
- Os pedidos para o sistema de introspeção são rejeitados.
- O
/Missions/name
campo é removido das solicitações que contêm mais de dois cabeçalhos.
<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>
Validação de mutações
Este exemplo aplica as seguintes regras de validação e autorização a uma mutação GraphQL:
- Solicitações maiores que 100 kb ou com profundidade de consulta maior que 4 são rejeitadas.
- As solicitações para mutar o
deleteUser
campo são negadas, exceto quando a solicitação é do endereço198.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>
Políticas relacionadas
Conteúdos relacionados
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transforme e proteja sua API
- Referência de política para uma lista completa de declarações de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Recompra de trechos de política
- Kit de ferramentas de política de Gerenciamento de API do Azure
- Criar políticas usando o Microsoft Copilot no Azure