Resolução de problemas de erros de tempo de execução da política BasicAuthentication

Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do Apigee Edge.

UnresolvedVariable

Código de 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

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

  • Fora do âmbito (não disponível no fluxo específico onde a política está a ser executada)
  • Não é possível resolver (não está definido)

Por exemplo, este erro ocorre se a política BasicAuthentication tiver uma variável especificada comorequest.header.Authorization no elemento<Source>, mas o cabeçalho de autorização não for transmitido como parte do pedido da API.

Diagnóstico

  1. Identifique a variável usada para o elemento <Source> na política BasicAuthentication. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring,, 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 onde ocorreu a falha. Pode haver uma ou mais políticas de BasicAuthentication. Identifique a política ou as políticas de BasicAuthentication específicas em que a variável especificada no elemento <Source> corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima).

    Por exemplo, a política seguinte define o elemento <Source> para uma variável denominada request.header.Authorization, que corresponde ao que está em 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. Determinar se a variável está definida e disponível no fluxo no qual a política BasicAuthentication está a ser executada.

  4. Se a variável for:

    1. Fora do âmbito (não disponível no fluxo específico onde a política está a ser executada)
    2. Não é possível resolver (não está definido)

    Então, essa é a causa do erro.

    No exemplo da política BasicAuthentication apresentado acima, a variável request.header.Authorizationnão foi transmitida como parte do pedido. Ou seja, o pedido da API foi feito sem o cabeçalho de autorização, conforme mostrado abaixo:

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

    Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

    Uma vez que a variável usada na política BasicAuthentication não está disponível, recebe o código de erro:

    steps.basicauthentication.UnresolvedVariable
    

Resolução

Certifique-se de que a variável usada na política BasicAuthentication está definida ou é transmitida como uma entrada e está disponível no fluxo onde a política está a ser executada.

Para corrigir o problema com a política BasicAuthentication de exemplo abordada acima, faça um pedido de API, conforme mostrado abaixo:

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

Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

InvalidBasicAuthenticationSource

Código de 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"
        }
    }
}

Exemplo de erro Mensagem de erro

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

Causas possíveis

As possíveis causas deste erro são:

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

Causa: variável de origem inválida

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

Por exemplo, este erro ocorre 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. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring,, 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 onde ocorreu a falha. Pode haver uma ou mais políticas de BasicAuthentication. Identifique as políticas de BasicAuthentication específicas em que a variável especificada no elemento <Source> corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima).

    Por exemplo, a política seguinte define o elemento <Source> para uma variável denominada request.header.Authorization, que corresponde ao que está em 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 no elemento <Source> especificado na variável não for uma string codificada em Base64 válida, essa é a causa do erro.

    No exemplo da política BasicAuthentication apresentado acima, a variável request.header.Authorizationenviada pelo cliente como um cabeçalho era inválida, conforme mostrado abaixo:

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

    Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

    Uma vez que a variável request.header.Authorizationtem uma string codificada em Base64 inválida "23435", recebe o código de erro:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Resolução

Certifique-se de que 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 BasicAuthentication abordada acima, faça um pedido de API transmitindo uma string codificada em Base64 válida no cabeçalho de autorização, conforme mostrado abaixo:

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

Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

Causa: o cabeçalho está formatado incorretamente/é inválido

Este erro ocorre se o cabeçalho transmitido à política BasicAuthentication estiver formatado incorretamente ou for inválido.

Por exemplo, este erro ocorre se a política BasicAuthentication tiver uma variável especificada comorequest.header.Authorization no elemento<Source> e o cabeçalho transmitido como parte do pedido da API estiver formatado incorretamente/inválido.

Diagnóstico

  1. Identifique a variável usada para o elemento <Source> na política BasicAuthentication. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, no erro seguinte, 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 onde ocorreu a falha. Pode haver uma ou mais políticas de BasicAuthentication. Identifique as políticas de BasicAuthentication específicas em que a variável especificada no elemento <Source> corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima).

    Por exemplo, a política seguinte define o elemento <Source> para uma variável denominada request.header.Authorization, que corresponde ao que está em 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 estiver mal formada ou for inválida, ou seja, não tiver o tipo de autenticação ou se o tipo de autenticação não for "Básico", essa é a causa do erro.

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

    Authorization: <Authentication type> <credentials>
    

    Um cabeçalho com formato incorreto pode ser transmitido à política BasicAuthentication de duas formas:

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

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

    Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

    No exemplo acima, o cabeçalho Authorization não tem o tipo de autenticação. Se este cabeçalho for transmitido à política BasicAuthentication apresentada acima, recebe o código de erro:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Exemplo 2: o tipo de autenticação não é do tipo "Básico":

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

    Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

    No exemplo acima, o cabeçalho Authorization não tem o tipo de autenticação "Basic". Se este valor for transmitido à política BasicAuthentication apresentada acima, recebe o código de erro:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Da mesma forma, este erro também pode ocorrer se o tipo de autenticação, como Bearer, Digest Auth, etc., for usado no cabeçalho de autorização.

Resolução

Certifique-se de que o cabeçalho no qual a entrada para a política BasicAuthentication é transmitida tem o tipo de autenticação e é do tipo "Básico".

Para corrigir o problema com a política BasicAuthentication abordada acima, faça um pedido de API transmitindo uma string codificada em Base64 válida com o tipo de autenticação "Básico" no cabeçalho de autorização, conforme mostrado abaixo:

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

Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.