Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Неразрешенная переменная
Код ошибки
steps.basicauthentication.UnresolvedVariable
Тело ответа об ошибке
{
"fault": {
"faultstring": "Unresolved variable : [variable_name]",
"detail": {
"errorcode": "steps.basicauthentication.UnresolvedVariable"
}
}
}
Пример сообщения об ошибке
{
"fault": {
"faultstring": "Unresolved variable : request.header.Authorization",
"detail": {
"errorcode": "steps.basicauthentication.UnresolvedVariable"
}
}
}
Причина
Эта ошибка возникает, если переменная, содержащая строку в кодировке Base64, указанную в элементе <Source> политики BasicAuthentication , имеет одно из следующих значений:
- Выход за рамки действия (недоступно в конкретном процессе, в котором выполняется политика)
- Не может быть решено (не определено)
Например, эта ошибка возникает, если в политике BasicAuthentication в элементе <Source> указана переменная request.header.Authorization , но заголовок Authorization не передается в составе API-запроса.
Диагноз
Определите переменную, используемую для элемента
<Source>в политике BasicAuthentication. Эту информацию можно найти в элементеfaultstringответа об ошибке. Например, в следующемfaultstring,используемая для элемента<Source>— этоrequest.header.Authorization:"faultstring": "Unresolved variable : request.header.Authorization"Проанализируйте все политики BasicAuthentication в конкретном API-прокси, где произошла ошибка. Может быть одна или несколько политик BasicAuthentication. Определите конкретную политику или политики BasicAuthentication, в которых переменная, указанная в элементе
<Source>, совпадает с именем переменной, указанным в строке ошибки (шаг №1 выше).Например, следующая политика устанавливает элемент
<Source>в переменную с именемrequest.header.Authorization, которая соответствует содержимому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>Определите, определена ли переменная и доступна ли она в процессе выполнения политики BasicAuthentication.
Если переменная имеет одно из следующих значений:
- Выход за рамки действия (недоступно в конкретном процессе, в котором выполняется политика)
- Не может быть решено (не определено)
Тогда в этом и заключается причина ошибки.
В приведенном выше примере политики BasicAuthentication переменная
request.header.Authorizationне была передана в составе запроса. То есть, запрос к API был выполнен без заголовка Authorization, как показано ниже:curl -v "http://org-env.apigee.net/basicauth"
Поскольку переменная, используемая в политике BasicAuthentication, недоступна, вы получаете код ошибки:
steps.basicauthentication.UnresolvedVariable
Разрешение
Убедитесь, что переменная, используемая в политике BasicAuthentication, определена или передана в качестве входных данных и доступна в потоке, где выполняется эта политика.
Чтобы исправить проблему с описанной выше политикой BasicAuthentication, выполните запрос к API, как показано ниже:
curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"
InvalidBasicAuthenticationSource
Код ошибки
steps.basicauthentication.InvalidBasicAuthenticationSource
Тело ответа об ошибке
{
"fault": {
"faultstring": "Source variable : [variable_name] for basic authentication decode policy is not valid",
"detail": {
"errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
}
}
}
Пример ошибки. Сообщение об ошибке.
{
"fault": {
"faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid",
"detail": {
"errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
}
}
}
Возможные причины
Возможные причины этой ошибки:
| Причина | Описание |
|---|---|
| Недопустимая исходная переменная | Входная переменная источника для политики BasicAuthentication не является допустимой строкой, закодированной в Base64. |
| Заголовок имеет некорректный формат. | Заголовок, содержащий строку в кодировке Base64, передаваемую в политику BasicAuthentication, имеет некорректный формат. |
Причина: Недопустимая исходная переменная
Эта ошибка возникает, если переменная, содержащая строку в кодировке Base64, указанную в элементе <Source> политики BasicAuthentication, не содержит допустимого значения.
Например, эта ошибка возникает, если переменная, указанная в элементе <Source> политики BasicAuthentication, не имеет допустимой строки, закодированной в Base64.
Диагноз
Определите переменную, используемую для элемента
<Source>в политике BasicAuthentication. Эту информацию можно найти в элементеfaultstringответа об ошибке. Например, в следующемfaultstring,используемая для элемента<Source>— этоrequest.header.Authorization:"faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"Проверьте все политики BasicAuthentication в конкретном API-прокси, где произошла ошибка. Может быть одна или несколько политик BasicAuthentication. Определите конкретную политику (или политики), в которой переменная, указанная в элементе
<Source>совпадает с именем переменной, указанным в строке ошибки (шаг №1 выше).Например, следующая политика устанавливает элемент
<Source>в переменную с именемrequest.header.Authorization, которая соответствует содержимому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>Если значение, хранящееся в переменной, указанной в элементе
<Source>не является допустимой строкой, закодированной в Base64, тоВ этом и заключается причина ошибки.В приведенном выше примере политики BasicAuthentication переменная
request.header.Authorization, отправленная клиентом в качестве заголовка, оказалась недействительной, как показано ниже:curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic 23435"
Поскольку переменная
request.header.Authorizationсодержит недопустимую строку в кодировке Base64 "23435", вы получаете код ошибки:steps.basicauthentication.InvalidBasicAuthenticationSource
Разрешение
Убедитесь, что переменная, указанная для элемента <Source> в политике BasicAuthentication, содержит допустимую строку, закодированную в Base64.
Чтобы исправить проблему с описанной выше политикой BasicAuthentication, выполните запрос к API, передав в заголовке Authorization допустимую строку в кодировке Base64, как показано ниже:
curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"
Причина: Заголовок имеет некорректный/недействительный формат.
Эта ошибка возникает, если заголовок, передаваемый в политику BasicAuthentication, имеет некорректный или недействительный формат.
Например, эта ошибка возникает, если в политике BasicAuthentication в элементе <Source> указана переменная request.header.Authorization , а заголовок, передаваемый в рамках API-запроса, имеет некорректный/недействительный формат.
Диагноз
Определите переменную, используемую для элемента
<Source>в политике BasicAuthentication. Эту информацию можно найти в элементеfaultstringответа об ошибке. Например, в следующей ошибке переменная, используемая для элемента<Source>— этоrequest.header.Authorization:"faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"Проверьте все политики BasicAuthentication в конкретном API-прокси, где произошла ошибка. Может быть одна или несколько политик BasicAuthentication. Определите конкретную политику (или политики), в которой переменная, указанная в элементе
<Source>совпадает с именем переменной, указанным в строке ошибки (шаг №1 выше).Например, следующая политика устанавливает элемент
<Source>в переменную с именемrequest.header.Authorization, которая соответствует содержимому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>Если переменная является заголовком и имеет некорректный или недопустимый формат, то есть в ней отсутствует тип аутентификации или тип аутентификации не равен "Basic", то это и является причиной ошибки.
Заголовок Authorization имеет следующий вид:
Authorization: <Authentication type> <credentials>Некорректный заголовок может быть передан в политику BasicAuthentication двумя способами:
Пример 1 : В заголовке отсутствует тип аутентификации:
curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: YWthc2g6MTIz"
В приведенном выше примере заголовок Authorization не содержит тип Authentication. Если этот заголовок передается в политику BasicAuthentication, показанную выше, вы получите код ошибки:
steps.basicauthentication.InvalidBasicAuthenticationSourceПример 2 : Тип аутентификации не относится к типу "Базовый":
curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"
В приведенном выше примере заголовок Authorization не содержит тип аутентификации "Basic". Если этот тип передается в политику BasicAuthentication, показанную выше, вы получите код ошибки:
steps.basicauthentication.InvalidBasicAuthenticationSourceАналогичным образом, эта ошибка может возникнуть и в случае использования в заголовке Authorization типа аутентификации, например, Bearer, Digest Auth и т. д.
Разрешение
Убедитесь, что заголовок, в который передаются входные данные для политики BasicAuthentication, имеет тип Authentication и относится к типу "Basic".
Чтобы исправить проблему с описанной выше политикой BasicAuthentication, выполните запрос к API, передав в заголовке Authorization допустимую строку в кодировке Base64 с типом аутентификации "Basic", как показано ниже:
curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"