Validar a solicitação do GraphQL
APLICA-SE A: todas as camadas do Gerenciamento de API
A política validate-graphql-request
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 solicitações válidas.
Observação
Defina os elementos da política e os elementos filho na ordem fornecida na declaração da política. Saiba mais sobre como definir e editar as 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 | Descrição | Obrigatório | Padrão |
---|---|---|---|
error-variable-name | Nome da variável em context.Variables para o qual registrar erros de validação. Expressões de política são permitidas. |
No | N/D |
max-size | Tamanho máximo da carga da solicitação em bytes. Valor máximo permitido: 102.400 bytes (100 KB). (Contate o suporte se precisar aumentar esse limite.) Expressões de políticas são permitidas. | Sim | N/D |
max-depth | Um inteiro. Profundidade máxima da consulta. Expressões de política são permitidas. | 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. Como opção, cada regra pode especificar uma ação diferente. Pode ser especificado condicionalmente usando uma expressão de política. | Não |
Atributos de regra
Atributo | Descrição | Obrigatório | Padrão |
---|---|---|---|
caminho | Caminho para executar a validação de autorização. Ele deve seguir o padrão: /type/field . |
Sim | N/D |
ação | Ação a ser executar se a regra se aplicar. Pode ser especificado condicionalmente usando uma expressão de política. | Não | allow |
Sistema de introspecção
A política para path=/__*
é o sistema de introspecção. Você pode usá-lo para rejeitar solicitações de introspecção (__schema
, __type
etc.).
Ações de solicitação
As ações disponíveis estão descritas na tabela a seguir.
Ação | Descrição |
---|---|
rejeitar | Ocorre um erro de solicitação e a solicitação não é enviada ao back-end. Regras adicionais, se configuradas, não são aplicadas. |
remove | Ocorre um erro de campo e o campo é removido da solicitação. |
allow | O campo é transmitido ao back-end. |
ignore | A regra não é válida para esse caso e a próxima regra é aplicada. |
Uso
- Seções de política: entrada
- Escopos de política: global, workspace, produto, API
- Gateways: clássico, v2, consumo, auto-hospedado, workspace
Observações de uso
Configure a política para uma API GraphQL de passagem ou sintética que foi importada para Gerenciamento de API.
Essa política só pode ser usada uma vez em uma seção de política.
Como as consultas do GraphQL usam um esquema mesclado, as permissões podem ser aplicadas em qualquer nó folha de um tipo de saída:
- Mutação, consulta ou assinatura
- Campo individual em uma declaração de tipo
As permissões não podem ser aplicadas a:
- Tipos de entrada
- Fragmentos
- Uniões
- Interfaces
- O elemento do esquema
Tratamento de erros
A falha na validação com relação ao esquema do GraphQL ou com relação ao tamanho ou a profundidade da solicitação consiste em um erro de solicitação e resulta na falha da solicitação com um bloco de erros (mas nenhum bloco de dados).
Semelhante à propriedade Context.LastError
, todos os erros de validação do GraphQL são propagados automaticamente na variável GraphQLErrors
. Se os erros precisarem ser propagados separadamente, especifique um nome de variável de erro. Os erros são enviados por push às variáveis error
e GraphQLErrors
.
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.
- As solicitações para o sistema de introspecção são rejeitadas.
- O campo
/Missions/name
é 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ção
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 modificar o campo
deleteUser
são negadas, exceto quando a solicitação é do endereço IP198.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>
Políticas relacionadas
Conteúdo relacionado
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transformar e proteger sua API
- Referência de Política para uma lista completa das instruções de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Repositório de snippets de política
- Criar políticas usando o Microsoft Copilot no Azure