Rozwiązywanie problemów związanych z błędem zasad uwierzytelniania podstawowego

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

UnresolvedVariable

Kod błędu

steps.basicauthentication.UnresolvedVariable

Treść odpowiedzi na błąd

{
    "fault": {
        "faultstring": "Unresolved variable : [variable_name]",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

Przykładowy komunikat o błędzie

{
    "fault": {
        "faultstring": "Unresolved variable : request.header.Authorization",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

Przyczyna

Ten błąd występuje, jeśli zmienna zawierająca ciąg znaków zakodowany w formacie Base64 określona w elemencie <Source> w zasadach BasicAuthentication:

  • Poza zakresem (niedostępne w konkretnym procesie, w którym są realizowane zasady)
  • Nie można rozwiązać (niezdefiniowana)

Ten błąd występuje na przykład wtedy, gdy zasada BasicAuthentication zawiera zmienną określoną jako request.header.Authorization w elemencie <Source>, ale nagłówek autoryzacji nie jest przekazywany w ramach żądania do interfejsu API.

Diagnostyka

  1. Zidentyfikuj zmienną używaną dla elementu <Source> w zasadach BasicAuthentication. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym elemencie faultstring, zmienna używana w elemencie <Source> to request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Sprawdź wszystkie zasady BasicAuthentication w przypadku konkretnego interfejsu API Proxy, w którym wystąpił błąd. Możesz mieć co najmniej 1 zasadę BasicAuthentication. Zidentyfikuj konkretną zasadę BasicAuthentication, w której zmienna określona w elemencie <Source> pasuje do nazwy zmiennej wskazanej w ciągu błędów (krok 1 powyżej).

    Na przykład w tej regule element <Source> jest ustawiony na zmienną o nazwie request.header.Authorization, która odpowiada wartości w elemencie 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. Sprawdź, czy zmienna jest zdefiniowana i dostępna w przepływie, w którym jest wykonywana zasada BasicAuthentication.

  4. Jeśli zmienna jest:

    1. Poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada)
    2. Nie można rozwiązać (niezdefiniowana)

    To jest przyczyna błędu.

    W przykładzie zasad BasicAuthentication pokazanych powyżej zmienna request.header.Authorization nie została przekazana jako część żądania. Oznacza to, że żądanie interfejsu API zostało wysłane bez nagłówka Authorization, jak pokazano poniżej:

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

    Zmienna używana w zasadzie uwierzytelniania podstawowego jest niedostępna, dlatego pojawia się kod błędu:

    steps.basicauthentication.UnresolvedVariable
    

Rozdzielczość

Upewnij się, że zmienna używana w zasadzie uwierzytelniania podstawowego jest zdefiniowana lub przekazywana jako dane wejściowe i dostępna w przepływie wykonywania zasady.

Aby rozwiązać problem z opisaną powyżej przykładową zasadą BasicAuthentication, wyślij żądanie interfejsu API w ten sposób:

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

InvalidBasicAuthenticationSource

Kod błędu

steps.basicauthentication.InvalidBasicAuthenticationSource

Treść odpowiedzi na błąd

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

Komunikat o błędzie

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

Możliwe przyczyny

Możliwe przyczyny tego błędu:

Przyczyna Opis
Nieprawidłowa zmienna źródłowa Zmienna źródła danych w zasadach dotyczących uwierzytelniania podstawowego nie jest prawidłowym ciągiem znaków zakodowanym w formacie Base64.
Nieprawidłowy format nagłówka Nagłówek zawierający ciąg tekstowy zakodowany w formacie base64 przekazany do zasad BasicAuthentication jest nieprawidłowy.

Przyczyna: nieprawidłowa zmienna źródła

Ten błąd występuje, gdy zmienna zawierająca ciąg znaków zakodowany w formacie Base64 określona w elemencie <Source> zasady BasicAuthentication nie zawiera prawidłowej wartości.

Ten błąd występuje na przykład, gdy zmienna określona w elemencie <Source> w zasadach BasicAuthentication nie zawiera prawidłowego ciągu znaków zakodowanego w formacie Base64.

Diagnostyka

  1. Zidentyfikuj zmienną używaną dla elementu <Source> w zasadach BasicAuthentication. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym elemencie faultstring, zmienna używana w elemencie <Source> to request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Sprawdź wszystkie zasady BasicAuthentication w przypadku konkretnego interfejsu API Proxy, w którym wystąpił błąd. Możesz mieć co najmniej 1 zasadę BasicAuthentication. Zidentyfikuj konkretne zasady BasicAuthentication, w których zmienna określona w elemencie <Source> odpowiada nazwie zmiennej wskazanej w ciągu błędów (czynność 1 powyżej).

    Na przykład w tej regule element <Source> jest ustawiony na zmienną o nazwie request.header.Authorization, która pasuje do wartości w elemencie 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. Jeśli wartość przechowywana w zmiennej podanej w elemencie <Source> nie jest prawidłowym ciągiem zakodowanym w standardzie Base64, to jest przyczyną błędu.

    W powyższej przykładowej zasadzie uwierzytelniania podstawowego zmienna request.header.Authorization wysłana przez klienta jako nagłówek była nieprawidłowa:

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

    Zmienna request.header.Authorization zawiera nieprawidłowy ciąg zakodowany w formacie base64 „23435"”, więc otrzymasz kod błędu:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Rozdzielczość

Upewnij się, że zmienna określona dla elementu <Source> w zasadach BasicAuthentication zawiera prawidłowy ciąg zakodowany w formacie Base64.

Aby rozwiązać problem z omawianą powyżej przykładową zasadą BasicAuthentication, wyślij żądanie do interfejsu API, przekazując prawidłowy ciąg zakodowany w formacie Base64 w nagłówku Authorization, jak pokazano poniżej:

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

Przyczyna: nieprawidłowy lub źle sformatowany nagłówek

Ten błąd występuje, jeśli nagłówek przekazany do zasady BasicAuthentication jest nieprawidłowy lub ma nieprawidłowy format.

Ten błąd występuje na przykład, gdy zasada BasicAuthentication ma zmienną określoną jako request.header.Authorization w elemencie <Source>, a nagłówek przekazany jako część żądania interfejsu API jest nieprawidłowo sformatowany lub nieprawidłowy.

Diagnostyka

  1. Zidentyfikuj zmienną używaną dla elementu <Source> w zasadach BasicAuthentication. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym błędzie zmienna używana dla elementu <Source> to request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Sprawdź wszystkie zasady BasicAuthentication w przypadku konkretnego interfejsu API Proxy, w którym wystąpił błąd. Może istnieć co najmniej 1 zasada uwierzytelniania podstawowego. Określ konkretne zasady uwierzytelniania podstawowego, w których zmienna określona w elemencie <Source> odpowiada nazwie zmiennej określonej w ciągu błędu (krok 1 powyżej).

    Na przykład ta zasada ustawia element <Source> na zmienną o nazwie request.header.Authorization, która odpowiada zawartości 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. Jeśli zmienna jest nagłówkiem i jest źle sformatowana lub nieprawidłowa, np. nie ma typu uwierzytelniania lub typ uwierzytelniania nie jest „Podstawowe”, to jest to przyczyna błędu.

    Nagłówek Authorization ma taki format:

    Authorization: <Authentication type> <credentials>
    

    Nieprawidłowy nagłówek można przekazać do reguły BasicAuthentication na 2 sposoby:

    Przykład 1. Brak typu uwierzytelniania w nagłówku:

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

    W powyższym przykładzie nagłówek Authorization nie zawiera typu Authentication. Jeśli ten nagłówek zostanie przekazany do zasady BasicAuthentication pokazanej powyżej, otrzymasz kod błędu:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Przykład 2: typ uwierzytelniania nie jest typem „Podstawowe”:

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

    W powyższym przykładzie nagłówek Authorization nie ma typu uwierzytelniania „Basic”. Jeśli zostanie on przekazany do zasady BasicAuthentication pokazanej powyżej, otrzymasz kod błędu:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Ten błąd może też wystąpić, jeśli w nagłówku Authorization jest używany typ uwierzytelniania, np. Bearer, Digest Auth itp.

Rozdzielczość

Upewnij się, że nagłówek, w którym przekazywane jest wejście do reguły BasicAuthentication, ma typ uwierzytelniania „Basic”.

Aby rozwiązać problem z omówioną powyżej przykładową zasadą uwierzytelniania podstawowego, wyślij żądanie do interfejsu API, przekazując w nagłówku autoryzacji prawidłowy ciąg zakodowany w standardzie Base64 z typem uwierzytelniania „Podstawowe” w nagłówku autoryzacji, jak pokazano poniżej:

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