Устранение ошибок во время выполнения базовой политики аутентификации

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

НеразрешеннаяПеременная

Код ошибки

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 есть переменная, указанная как request.header.Authorization в элементе <Source> , но заголовок авторизации не передается как часть запроса API.

Диагностика

  1. Определите переменную, используемую для элемента <Source> в политике BasicAuthentication. Эту информацию можно найти в элементе faultstring ответа об ошибке. Например, в следующей faultstring, для элемента <Source> используется переменная request.header.Authorization :

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Проверьте все политики 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>
    
  3. Определите, определена ли переменная и доступна ли она в потоке, в котором выполняется политика BasicAuthentication.

  4. Если переменная:

    1. Вне области действия (недоступно в конкретном потоке, в котором выполняется политика)
    2. Не может быть решено (не определено)

    Тогда это и есть причина ошибки.

    В примере политики BasicAuthentication, показанном выше, переменная request.header.Authorization не была передана как часть запроса. То есть запрос API был сделан без заголовка авторизации, как показано ниже:

    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"

Инвалидбасикаутентикатионсаурце

Код ошибки

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.

Диагностика

  1. Определите переменную, используемую для элемента <Source> в политике BasicAuthentication. Эту информацию можно найти в элементе faultstring ответа об ошибке. Например, в следующей faultstring, для элемента <Source> используется переменная request.header.Authorization :

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Проверьте все политики 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>
    
  3. Если значение, хранящееся в переменной, указанной в элементе <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, передав действительную строку в кодировке Base64 в заголовке авторизации, как показано ниже:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Причина: заголовок неверный/недействительный.

Эта ошибка возникает, если заголовок, переданный в политику BasicAuthentication, имеет неправильный или недопустимый формат.

Например, эта ошибка возникает, если в политике BasicAuthentication есть переменная, указанная как request.header.Authorization в элементе <Source> , а заголовок, переданный как часть запроса API, имеет неверный формат или недействителен.

Диагностика

  1. Определите переменную, используемую для элемента <Source> в политике BasicAuthentication. Эту информацию можно найти в элементе faultstring ответа об ошибке. Например, в следующей ошибке для элемента <Source> используется переменная request.header.Authorization :

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Проверьте все политики 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>
    
  3. Если переменная является заголовком и имеет неверный формат или недействительна, т. е. не имеет типа аутентификации или если тип аутентификации не «Базовый», то это и есть причина ошибки.

    Заголовок авторизации имеет следующую форму:

    Authorization: <Authentication type> <credentials>
    

    Неверный заголовок можно передать в политику BasicAuthentication двумя способами:

    Пример 1. В заголовке нет типа аутентификации:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: YWthc2g6MTIz"

    В приведенном выше примере заголовок авторизации не имеет типа аутентификации. Если этот заголовок передается в политику BasicAuthentication, показанную выше, вы получаете код ошибки:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Пример 2. Тип аутентификации отличается от типа «Базовый»:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    В приведенном выше примере заголовок авторизации не имеет типа аутентификации «Базовый». Если это будет передано в политику BasicAuthentication, показанную выше, вы получите код ошибки:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Аналогично, эта ошибка также может возникнуть, если в заголовке авторизации используется тип аутентификации, такой как носитель, дайджест-аутентификация и т. д.

Разрешение

Убедитесь, что заголовок, в котором передаются входные данные для политики BasicAuthentication, имеет тип аутентификации и тип «Basic».

Чтобы устранить проблему с примером политики BasicAuthentication, описанной выше, сделайте запрос API, передав действительную строку в кодировке Base64 с типом аутентификации «Basic» в заголовке авторизации, как показано ниже:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"