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

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

Para obter mais informações sobre como trabalhar com políticas, consulte: