Partilhar via


Validar solicitação do GraphQL

APLICA-SE A: Todos os API Management níveis

A política validate-graphql-request valida o pedido GraphQL e autoriza access a caminhos de consulta específicos numa API 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 API Management políticas.

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 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. Não 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). (Contacte suporte se precisar de aumentar este limite.) Expressões de políticas são permitidas. 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 Necessá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.

Para cada campo folha GraphQL, API Management avalia todas as regras de correspondência e aplica a correspondência de caminho mais específica (por exemplo, /Query/listUsers sobrepõe /Query/*).
Não

atributos da regra

Atributo Descrição Necessário Predefinição
caminho Caminho para executar a validação de autorização. Deve seguir o padrão: /type/field. Sim N/A
ação 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.
remover 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 pass-through ou sintética que tenha sido importada para API Management.

  • 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ç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: