Solução de problemas de erros no ambiente de execução da política BasicAuthentication

Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.

UnresolvedVariable

Código do erro

steps.basicauthentication.UnresolvedVariable

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Unresolved variable : [variable_name]",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

Exemplo de mensagem de erro

{
    "fault": {
        "faultstring": "Unresolved variable : request.header.Authorization",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

Causa

Esse erro ocorrerá se a variável que contém a string codificada em Base64 especificada no elemento <Source> da política BasicAuthentication for:

  • Fora do escopo (não disponível no fluxo específico em que a política está sendo executada)
  • Não é possível resolver (não está definida)

Por exemplo, esse erro ocorrerá se a política BasicAuthentication tiver uma variável especificada como request.header.Authorization no elemento <Source>, mas o cabeçalho Authorization não for transmitido como parte da solicitação de API.

Diagnóstico

  1. Identifique a variável usada para o elemento <Source> na política BasicAuthentication. Você encontra essas informações no elemento faultstring da resposta de erro. Por exemplo, no faultstring, a seguir, a variável usada para o elemento <Source> é request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Examine todas as políticas BasicAuthentication no proxy de API específico em que a falha ocorreu. Pode haver uma ou mais políticas BasicAuthentication. Identifique as políticas ou a política BasicAuthentication específicas em que a variável especificada no elemento <Source> corresponde ao nome da variável identificado na string de falha (etapa 1 acima).

    Por exemplo, a política a seguir define o elemento <Source> como uma variável chamada request.header.Authorization, que corresponde ao que está na faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
      <DisplayName>Decode Basic Authentication Header</DisplayName>
      <Operation>Decode</Operation>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <User ref="request.header.username"/>
      <Password ref="request.header.password"/>
      <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. Determine se a variável está definida e disponível no fluxo em que a política BasicAuthentication está sendo executada.

  4. Se a variável for:

    1. Fora do escopo (não disponível no fluxo específico em que a política está sendo executada)
    2. Não é possível resolver (não está definida)

    essa será a causa do erro.

    No exemplo de política BasicAuthentication mostrado acima, a variável request.header.Authorization não foi transmitida como parte da solicitação. Ou seja, a solicitação de API foi feita sem o cabeçalho Authorization, como mostrado abaixo:

    curl -v "http://$EXTERNAL_IP/basicauth"

    Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalize o roteamento de acesso.

    Como a variável usada na política BasicAuthentication não está disponível, você recebe o código de erro:

    steps.basicauthentication.UnresolvedVariable
    

Resolução

Verifique se a variável usada na política BasicAuthentication está definida ou transmitida como uma entrada e disponível no fluxo em que a política está sendo executada.

Para corrigir o problema com a política de exemplo BasicAuthentication discutida acima, faça uma solicitação de API conforme mostrado abaixo:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalize o roteamento de acesso.

InvalidBasicAuthenticationSource

Código do erro

steps.basicauthentication.InvalidBasicAuthenticationSource

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Source variable : [variable_name] for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

Mensagem de erro de exemplo

{
    "fault": {
        "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

Causas possíveis

Veja a seguir as possíveis causas para esse erro:

Causa Descrição
Variável de origem inválida A variável de origem de entrada para BasicPolicy Policy não é uma string válida codificada em Base64.
O cabeçalho está incorreto O cabeçalho que contém a string codificada em Base64 passada para a política BasicAuthentication está incorreto.

Causa: variável de origem inválida

Esse erro ocorrerá se a variável que contém a string codificada em Base64 especificada no elemento <Source> da política BasicAuthentication não contém um valor válido.

Por exemplo, esse erro ocorrerá se a variável especificada no elemento <Source> da política BasicAuthentication não tiver uma string codificada em Base64 válida.

Diagnóstico

  1. Identifique a variável usada para o elemento <Source> na política BasicAuthentication. Você encontra essas informações no elemento faultstring da resposta de erro. Por exemplo, no faultstring, a seguir, a variável usada para o elemento <Source> é request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Examine todas as políticas BasicAuthentication no proxy de API específico em que a falha ocorreu. Pode haver uma ou mais políticas BasicAuthentication. Identifique as políticas ou a política BasicAuthentication específicas em que a variável especificada no elemento <Source> corresponde ao nome da variável identificado na string de falha (etapa 1 acima).

    Por exemplo, a política a seguir define o elemento <Source> como uma variável chamada request.header.Authorization, que corresponde ao que está na faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
        <DisplayName>Decode Basic Authentication Header</DisplayName>
        <Operation>Decode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="request.header.username"/>
        <Password ref="request.header.password"/>
        <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. Se o valor armazenado na variável especificada no elemento <Source> não for uma string codificada em Base64 válida, isso é a causa do erro.

    No exemplo de política BasicAuthentication mostrado acima, a variável request.header.Authorization que foi enviada pelo cliente como cabeçalho foi inválida, conforme mostrado abaixo:

    curl -v "http://$EXTERNAL_IP /basicauth" -H "Authorization: Basic 23435"

    Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalizar o roteamento de acesso.

    Como a variável request.header.Authorization tem uma string codificada em Base64 inválida "23435"", você recebe o código de erro:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Resolução

Verifique se a variável especificada para o elemento <Source> na política BasicAuthentication tem uma string codificada em Base64 válida.

Para corrigir o problema com a política de exemplo BasicAuthentication discutida acima, faça uma solicitação de API transmitindo uma string codificada em Base64 válida no cabeçalho Authorization como mostrado abaixo:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalize o roteamento de acesso.

Causa: o cabeçalho está incorreto/inválido

Esse erro ocorrerá se o cabeçalho passado para a política BasicAuthentication estiver incorreto ou for inválido.

Por exemplo, esse erro ocorrerá se a política BasicAuthentication tiver uma variável especificada como request.header.Authorization no elemento <Source> e o cabeçalho passado como parte da solicitação de API for malformado/inválido.

Diagnóstico

  1. Identifique a variável usada para o elemento <Source> na política BasicAuthentication. Você encontra essas informações no elemento faultstring da resposta de erro. Por exemplo, no erro a seguir, a variável usada para o elemento <Source> é request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Examine todas as políticas BasicAuthentication no proxy de API específico em que a falha ocorreu. Pode haver uma ou mais políticas BasicAuthentication. Identifique as políticas ou a política BasicAuthentication específicas em que a variável especificada no elemento <Source> corresponde ao nome da variável identificado na string de falha (etapa 1 acima).

    Por exemplo, a política a seguir define o elemento <Source> como uma variável chamada request.header.Authorization, que corresponde ao que está na faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
        <DisplayName>Decode Basic Authentication Header</DisplayName>
        <Operation>Decode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="request.header.username"/>
        <Password ref="request.header.password"/>
        <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. Se a variável for um cabeçalho e for malformada ou inválida, ou seja, não tiver o tipo de autenticação ou se o tipo de autenticação não for "Basic", isso é a causa do erro.

    O cabeçalho de autorização tem este formato:

    Authorization: <Authentication type> <credentials>
    

    Um cabeçalho incorreto pode ser passado à política BasicAuthentication de duas maneiras:

    Exemplo 1: nenhum tipo de autenticação no cabeçalho:

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: YWthc2g6MTIz"

    Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalizar o roteamento de acesso.

    No exemplo acima, o cabeçalho Authorization não tem o tipo Autenticação. Se esse cabeçalho for passado à política BasicAuthentication mostrada acima, você receberá o código de erro:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Exemplo 2: o tipo de autenticação não é do tipo "Basic":

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalize o roteamento de acesso.

    No exemplo acima, o cabeçalho Authorization não tem o tipo de autenticação "Basic". Se ele for passado para a política BasicAuthentication mostrada acima, você receberá o código de erro:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Da mesma forma, esse erro também poderá ocorrer se o tipo de autenticação, como Bearer, Digest Auth etc. for usado no cabeçalho Authorization.

Resolução

Verifique se o cabeçalho em que a entrada para a política BasicAuthentication foi transmitida tem o tipo de autenticação e é do tipo "Basic".

Para corrigir o problema com a política de exemplo BasicAuthentication discutida acima, faça uma solicitação de API transmitindo uma string codificada em Base64 válida com o tipo de autenticação "Basic" no cabeçalho Authorization, como mostrado abaixo:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalize o roteamento de acesso.