Solucionar problemas de errores del entorno de ejecución de la política BasicAuthentication

Estás consultando 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 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 la variable que contiene la cadena codificada en base64 especificada en el elemento <Source> de la política BasicAuthentication es:

  • Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política)
  • No se puede resolver (no está definido)

Por ejemplo, este error se produce si la política BasicAuthentication tiene una variable especificada comorequest.header.Authorization en el elemento<Source>, pero el encabezado Authorization no se incluye en la solicitud de la API.

Diagnóstico

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

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Examina todas las políticas BasicAuthentication del proxy de API específico en el que se ha producido el error. Puede haber una o varias políticas BasicAuthentication. Identifica la política o las políticas de BasicAuthentication específicas en las que la variable especificada en el elemento <Source> coincide con el nombre de la variable identificada en la cadena de error (paso 1 anterior).

    Por ejemplo, la siguiente política asigna al elemento <Source> una variable llamada request.header.Authorization, que coincide con lo que hay en 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 está ejecutando la política BasicAuthentication.

  4. Si la variable es:

    1. Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política)
    2. No se puede resolver (no está definido)

    Entonces, esa es la causa del error.

    En el ejemplo de política BasicAuthentication que se muestra arriba, la variable request.header.Authorizationno se ha enviado como parte de la solicitud. Es decir, la solicitud de API se ha realizado sin el encabezado Authorization, como se muestra a continuación:

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

    Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

    Como la variable usada en la política BasicAuthentication no está disponible, recibes el código de error:

    steps.basicauthentication.UnresolvedVariable
    

Resolución

Asegúrate de que la variable utilizada en la política BasicAuthentication se ha definido o se ha transferido como entrada y está disponible en el flujo en el que se está ejecutando la política.

Para solucionar el problema con la política BasicAuthentication de ejemplo que hemos comentado anteriormente, haz una solicitud a la API como se muestra a continuación:

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

Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

InvalidBasicAuthenticationSource

Código de error

steps.basicauthentication.InvalidBasicAuthenticationSource

Cuerpo de respuesta de error

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

Mensaje de error de ejemplo de error

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

Posibles motivos

Estas son las posibles causas de este error:

Causa Descripción
Variable de origen no válida La variable de origen de entrada de la política BasicAuthentication no es una cadena codificada en Base64 válida.
El encabezado tiene un formato incorrecto El encabezado que contiene la cadena codificada en Base64 que se ha transferido 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 cadena 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 cadena codificada en Base64 válida.

Diagnóstico

  1. Identifica la variable que se usa en el elemento <Source> de la política BasicAuthentication. Puede encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente faultstring,, la variable utilizada 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 del proxy de API específico en el que se ha producido el error. Puede haber una o varias políticas BasicAuthentication. Identifica las políticas de BasicAuthentication específicas en las que la variable especificada en el elemento <Source> coincide con el nombre de la variable identificada en la cadena de error (paso 1 anterior).

    Por ejemplo, la siguiente política asigna al elemento <Source> una variable llamada request.header.Authorization, que coincide con lo que hay en 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 cadena codificada en Base64 válida, esa es la causa del error.

    En el ejemplo de la política BasicAuthentication que se muestra arriba, la variable request.header.Authorizationque ha enviado el cliente como encabezado no era válida, tal como se muestra a continuación:

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

    Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

    Como la variable request.header.Authorization tiene una cadena codificada en Base64 no válida ("23435""), se muestra el siguiente código de error:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Resolución

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

Para solucionar el problema con la política BasicAuthentication de ejemplo que se ha descrito anteriormente, haz una solicitud de API pasando una cadena codificada en Base64 válida en el encabezado Authorization, como se muestra a continuación:

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

Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

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

Este error se produce si el encabezado que se ha enviado a la política BasicAuthentication tiene un formato incorrecto 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 ha enviado como parte de la solicitud de la API tiene un formato incorrecto o no es válido.

Diagnóstico

  1. Identifica la variable que se usa en el elemento <Source> de la política BasicAuthentication. Puede encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente error, la variable utilizada 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 del proxy de API específico en el que se ha producido el error. Puede haber una o varias políticas BasicAuthentication. Identifica las políticas de BasicAuthentication específicas en las que la variable especificada en el elemento <Source> coincide con el nombre de la variable identificada en la cadena de error (paso 1 anterior).

    Por ejemplo, la siguiente política asigna al elemento <Source> una variable llamada request.header.Authorization, que coincide con lo que hay en 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 es válida (por ejemplo, no tiene el tipo de autenticación o el tipo de autenticación no es "Basic"), ese es el motivo del error.

    El encabezado Authorization tiene este formato:

    Authorization: <Authentication type> <credentials>
    

    Un encabezado con formato incorrecto se puede transferir a la política BasicAuthentication de dos formas:

    Ejemplo 1: no hay ningún tipo de autenticación en el encabezado:

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

    Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Ejemplo 2: El tipo de autenticación no es "Basic":

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

    Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Del mismo modo, este error también puede producirse si se usa el tipo de autenticación (por ejemplo, Bearer o Digest Auth) en el encabezado Authorization.

Resolución

Asegúrate de que la cabecera en la que se transfiere la entrada a la política BasicAuthentication tenga el tipo de autenticación y sea de tipo "Basic".

Para solucionar el problema con la política BasicAuthentication de ejemplo que se ha descrito anteriormente, haz una solicitud de API pasando una cadena codificada en Base64 válida con el tipo de autenticación "Basic" en el encabezado Authorization, tal como se muestra a continuación:

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

Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.