As transformações de cabeçalho não funcionam conforme esperado

Descubra como solucionar problemas de transformações de cabeçalho que não adicionam, substituem ou renomeiam cabeçalhos conforme esperado ao criar implantações de API com o serviço de Gateway de API.

Se o Gateway de API não adicionar, substituir ou renomear um cabeçalho conforme esperado, primeiro verifique se a configuração de rota e política disponibiliza o valor de contexto necessário para a transformação. A transformação também pode direcionar um cabeçalho protegido, produzir um valor de cabeçalho inválido ou usar uma definição ifExists que mantenha o valor de cabeçalho existente.

Sintomas do Problema

Você pode ver um ou mais dos seguintes sintomas:

  • O serviço de back-end não recebe o cabeçalho que você espera que o Gateway de API adicione.
  • O cabeçalho está presente, mas o valor está vazio ou inalterado.
  • A transformação do cabeçalho parece estar configurada corretamente, mas a solicitação enviada ao serviço de back-end não inclui a alteração esperada do cabeçalho.

Possíveis Causas

Esse problema pode ter uma ou mais das seguintes causas:

  • A rota usa uma política de autorização ANONYMOUS; portanto, o Gateway de API não preenche valores request.auth[...] para a rota.
  • A transformação do cabeçalho tenta modificar um cabeçalho de solicitação protegido ou um cabeçalho de resposta protegido que o Gateway de API não transforma.
  • A expressão de transformação renderiza um valor inválido ou não produz um valor utilizável.
  • A definição ifExists mantém o cabeçalho original inalterado.

Revisar a Configuração da Rota

Revise a rota que tratou a solicitação e verifique os seguintes detalhes:

  • A solicitação correspondeu à rota esperada.
  • A rota usa a definição requestPolicies.authentication esperada.
  • A rota inclui a transformação esperada na seção requestPolicies.headerTransformations ou na seção responsePolicies.headerTransformations.
  • A transformação só depende de request.auth[...] quando a rota executa a autenticação.
  • O cabeçalho de destino não é um cabeçalho de solicitação protegido nem um cabeçalho de resposta protegido que o Gateway de API se recusa a transformar.

Se a transformação usar uma expressão como ${request.auth[access_token_claims][claim1]}, a rota deverá usar uma política de autorização que execute autenticação. Quando uma rota usa a política de autorização ANONYMOUS, o Serviço API Gateway não autentica a solicitação e não preenche os valores request.auth[...].

Revisar a Rota e os Logs

  1. Na Console, abra a implantação de API que tratou da solicitação.
  2. Verifique a rota correspondente, a política de autenticação e a política de transformação de cabeçalho.
  3. Envie a mesma solicitação novamente para criar um novo exemplo de falha.
  4. No OCI Logging, abra o log de acesso e o log de execução do Gateway de API para a implantação.
  5. Use o ID da solicitação da resposta para localizar a mesma solicitação nos dois logs.
  6. No log de execução, revise a solicitação de erros de transformação de cabeçalho.

Revisar Mensagens de Log

Verifique o log de execução da solicitação com falha. As seguintes entradas de log podem identificar por que o gateway de API ignorou ou rejeitou a transformação:

  • headerTransformation.protectedHeaderTransformed: A política tentou transformar um cabeçalho protegido.
  • headerTransformation.badHeaderValue: O valor do cabeçalho renderizado continha caracteres não suportados ou era inválido.
  • headerTransformation.missingSetValues: A expressão de transformação não produziu um valor válido; portanto, o API Gateway ignorou a atualização do cabeçalho.

Corrigir Transformações de Cabeçalho

Use a correção que corresponde à causa encontrada:

  • Se a transformação depender de reivindicações de token, altere a rota para usar uma política de autorização autenticada, como AUTHENTICATION_ONLY, em vez de ANONYMOUS.
  • Se a solicitação depender de reivindicações de token, envie a solicitação novamente com um token válido e verifique se a validação do token foi bem-sucedida.
  • Se a transformação atingir um cabeçalho protegido, atualize a política para usar outro cabeçalho.
  • Se a expressão renderizar um resultado inválido ou vazio, atualize a expressão para que ela produza um valor de cabeçalho válido.
  • Se o resultado aparecer inalterado, revise a configuração ifExists. SKIP mantém um cabeçalho existente inalterado e APPEND adiciona valores sem substituir o cabeçalho original.

Verificar Transformações de Cabeçalho

Depois de atualizar a rota ou a política, verifique se a transformação do cabeçalho funciona conforme esperado:

  • Envie a mesma solicitação novamente.
  • Verifique se o serviço de back-end recebe o cabeçalho e o valor esperados.
  • Verifique se o log de execução não mostra os erros de transformação de cabeçalho descritos neste tópico.