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

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

UnresolvedVariable

Код ошибки

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>, но заголовок Authorization не передается как часть запроса к 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. Не удается разрешить (не определено)

    Значит, причина ошибки в этом.

    В примере выше переменная 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.

диагностика;

  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, передав в заголовке Authorization действительную строку в кодировке Base64, как показано ниже:

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

Причина: заголовок имеет недопустимый формат

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

Например, эта ошибка возникает, если в элементе<Source> правила BasicAuthentication указана переменнаяrequest.header.Authorization, а заголовок, переданный в составе запроса к 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. Если переменная является заголовком и имеет неправильный формат или недопустимое значение, то есть в ней нет типа аутентификации или тип аутентификации не "Basic", это и является причиной ошибки.

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

    Authorization: <Authentication type> <credentials>
    

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

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Пример 2. Тип аутентификации не "Basic":

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Аналогичная ошибка может возникнуть, если в заголовке Authorization используется тип аутентификации, например Bearer или Digest Auth.

Разрешение

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

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

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