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

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

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ço 198.51.100.1IP .
<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: