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
Identifica la variable que se usa para el elemento
<Source>
en la política BasicAuthentication. Puedes encontrar esta información en el elementofaultstring
de la respuesta de error. Por ejemplo, en la siguientefaultstring,
, la variable que se usa para el elemento<Source>
esrequest.header.Authorization
:"faultstring": "Unresolved variable : request.header.Authorization"
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 llamadarequest.header.Authorization
, que coincide con lo que hay en lafaultstring
:<?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>
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.
Verifica si la variable tiene una de las siguientes características:
- 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)
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
Identifica la variable que se usa para el elemento
<Source>
en la política BasicAuthentication. Puedes encontrar esta información en el elementofaultstring
de la respuesta de error. Por ejemplo, en la siguientefaultstring,
, la variable que se usa para el elemento<Source>
esrequest.header.Authorization
:"faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
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 llamadarequest.header.Authorization
, que coincide con lo que hay en lafaultstring
:<?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>
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
Identifica la variable que se usa para el elemento
<Source>
en la política BasicAuthentication. Puedes encontrar esta información en el elementofaultstring
de la respuesta de error. Por ejemplo, en el siguiente error, la variable que se usa para el elemento<Source>
esrequest.header.Authorization
:"faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
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 llamadarequest.header.Authorization
, que coincide con lo que hay en lafaultstring
:<?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>
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.