Solución de problemas de error de entorno de ejecución de la política BasicAuthentication

Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

UnresolvedVariable

Código de error

steps.basicauthentication.UnresolvedVariable

Cuerpo de la respuesta de error

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

Ejemplo de mensaje de error

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

Causa

Este error se produce si ocurre lo siguiente con la variable que contiene la string codificada en Base64 especificada en el elemento <Source> de la política BasicAuthentication:

  • Está fuera del alcance (no está disponible en el flujo específico en el que se ejecuta la política) o
  • No se puede resolver (no está definida)

Por ejemplo, este error ocurre si la política BasicAuthentication tiene una variable especificada como request.header.Authorization en el elemento <Source>, pero el encabezado de autorización no se pasa como parte de la solicitud a la API.

Diagnóstico

  1. Identifica la variable que se usa para el elemento <Source> en la política BasicAuthentication. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente faultstring,, la variable que se usa para el elemento <Source> es request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Examina todas las políticas BasicAuthentication en el proxy de API específico en el que ocurrió la falla. Podría haber una o más políticas BasicAuthentication. Identifica la política o las políticas BasicAuthentication específicas en las que la variable especificada en el elemento <Source> coincide con el nombre de variable identificado en la string de falla (paso 1 anterior).

    Por ejemplo, con la siguiente política, se establece el elemento <Source> en una variable llamada request.header.Authorization, que coincide con lo que hay en la 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. Determina si la variable está definida y disponible en el flujo en el que se ejecuta la política de protección contra el aumento de tráfico.

  4. Verifica si la variable tiene una de las siguientes características:

    1. Está fuera del alcance (no está disponible en el flujo específico en el que se ejecuta la política) o
    2. No se puede resolver (no está definida)

    Entonces esa es la causa del error.

    En la política de BasicAuthentication de ejemplo que se muestra antes, la variable request.header.Authorization no se pasó como parte de la solicitud. Es decir, la solicitud a la API se realizó sin el encabezado de autorización, como se muestra a continuación:

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

    En el ejemplo anterior, $EXTERNAL_IP es la dirección IP del balanceador de cargas externo. Esta dirección IP se expone a Internet. Para obtener más información, consulta Personaliza el enrutamiento de acceso.

    Dado que la variable que se usó en la política BasicAuthentication no está disponible, recibirás el código de error:

    steps.basicauthentication.UnresolvedVariable
    

Solución

Asegúrate de que la variable utilizada en la política BasicAuthentication se defina o pase como una entrada y esté disponible en el flujo en el que se ejecuta la política.

Para solucionar el problema con la política BasicAuthentication de muestra anterior, realiza una solicitud a la API como se muestra a continuación:

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

En el ejemplo anterior, $EXTERNAL_IP es la dirección IP del balanceador de cargas externo. Esta dirección IP se expone a Internet. Para obtener más información, consulta Personaliza el enrutamiento de acceso.

InvalidBasicAuthenticationSource

Código de error

steps.basicauthentication.InvalidBasicAuthenticationSource

Cuerpo de la respuesta de error

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

Ejemplo de mensaje de error

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

Causas posibles

Las siguientes son las posibles causas de este error:

Causa Descripción
Variable de origen no válida La variable de fuente de entrada para la política BasicAuthentication no es una string codificada en Base64 válida.
El encabezado tiene un formato incorrecto El encabezado que contiene la string codificada en Base64 que se pasa a la política BasicAuthentication tiene un formato incorrecto.

Causa: Variable de origen no válida

Este error se produce si la variable que contiene la string codificada en Base64 especificada en el elemento <Source> de la política BasicAuthentication no contiene un valor válido.

Por ejemplo, este error se produce si la variable especificada en el elemento <Source> de la política BasicAuthentication no tiene una string codificada en Base64 válida.

Diagnóstico

  1. Identifica la variable que se usa para el elemento <Source> en la política BasicAuthentication. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente faultstring,, la variable que se usa para el elemento <Source> es request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Examina todas las políticas BasicAuthentication en el proxy de API específico en el que ocurrió la falla. Podría haber una o más políticas BasicAuthentication. Identifica la(s) política(s) específica(s) de BasicAuthentication, en la que la variable especificada en el elemento <Source> coincide con el nombre de variable identificado en la string con errores (paso 1 anterior).

    Por ejemplo, con la siguiente política, se establece el elemento <Source> en una variable llamada request.header.Authorization, que coincide con lo que hay en la 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. Si el valor almacenado en la variable especificada en el elemento <Source> no es una string codificada en base64 válida, es la causa del error.

    En la política BasicAuthentication que se muestra arriba, la variable request.header.Authorization que el cliente envió como encabezado no es válida, como se muestra a continuación:

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

    En el ejemplo anterior, $EXTERNAL_IP es la dirección IP del balanceador de cargas externo. Esta dirección IP se expone a Internet. Para obtener más información, consulta Personaliza el enrutamiento de acceso.

    Dado que la variable request.header.Authorization tiene una string codificada en base64 "23435" no válida, recibirás el código de error:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Solución

Asegúrate de que la variable especificada para el elemento <Source> en la política BasicAuthentication tenga una string codificada en Base64 válida.

Para solucionar el problema con la política de muestra BasicAuthentication anterior, realiza una solicitud a la API mediante el paso de una string codificada en Base64 válida en el encabezado de autorización, como se muestra a continuación:

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

En el ejemplo anterior, $EXTERNAL_IP es la dirección IP del balanceador de cargas externo. Esta dirección IP se expone a Internet. Para obtener más información, consulta Personaliza el enrutamiento de acceso.

Causa: El encabezado tiene un formato incorrecto o no válido

Este error se produce si el encabezado que se pasó a la política BasicAuthentication tiene errores de formato o no es válido.

Por ejemplo, este error se produce si la política BasicAuthentication tiene una variable especificada como request.header.Authorization en el elemento <Source> y el encabezado que se pasó como parte de la solicitud a la API tiene un formato incorrecto o no válido.

Diagnóstico

  1. Identifica la variable que se usa para el elemento <Source> en la política BasicAuthentication. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente error, la variable que se usa para el elemento <Source> es request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Examina todas las políticas BasicAuthentication en el proxy de API específico en el que ocurrió la falla. Podría haber una o más políticas BasicAuthentication. Identifica la(s) política(s) específica(s) de BasicAuthentication, en la que la variable especificada en el elemento <Source> coincide con el nombre de variable identificado en la string con errores (paso 1 anterior).

    Por ejemplo, con la siguiente política, se establece el elemento <Source> en una variable llamada request.header.Authorization, que coincide con lo que hay en la 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. Si la variable es un encabezado y tiene un formato incorrecto o no válido, es decir, no tiene el tipo de autenticación o si el tipo de autenticación no es "Basic", esa es la causa del error.

    El encabezado de autorización tiene este formato:

    Authorization: <Authentication type> <credentials>
    

    Se puede pasar un encabezado con formato incorrecto a la política BasicAuthentication de dos maneras:

    Ejemplo 1: Sin tipo de autenticación en el encabezado:

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

    En el ejemplo anterior, $EXTERNAL_IP es la dirección IP del balanceador de cargas externo. Esta dirección IP se expone a Internet. Para obtener más información, consulta Personaliza el enrutamiento de acceso.

    En el ejemplo anterior, el encabezado de autorización no tiene el tipo de autenticación. Si este encabezado se pasa a la política BasicAuthentication que se muestra antes, recibirás el código de error:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Ejemplo 2: El tipo de autenticación no es del tipo "Básica":

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

    En el ejemplo anterior, $EXTERNAL_IP es la dirección IP del balanceador de cargas externo. Esta dirección IP se expone a Internet. Para obtener más información, consulta Personaliza el enrutamiento de acceso.

    En el ejemplo anterior, el encabezado de autorización no tiene el tipo de autenticación "Basic". Si se pasa a la política BasicAuthentication que se muestra arriba, recibirás el código de error:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    De manera similar, este error también puede ocurrir si el tipo de autenticación, como Bearer, Digest Auth, etc., se usa en el encabezado de autorización.

Solución

Asegúrate de que el encabezado en el que se pase la entrada a la política BasicAuthentication tenga el tipo de autenticación y sea del tipo “Basic”.

Para solucionar el problema con la política de muestra BasicAuthentication mencionada anteriormente, realiza una solicitud a la API con el paso de una string codificada en Base64 válida con el tipo de autenticación "Básica" al encabezado Autorización como se muestra a continuación:

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

En el ejemplo anterior, $EXTERNAL_IP es la dirección IP del balanceador de cargas externo. Esta dirección IP se expone a Internet. Para obtener más información, consulta Personaliza el enrutamiento de acceso.