Temel Kimlik Doğrulama politikası çalışma zamanı hatasını giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

UnresolvedVariable

Hata kodu

steps.basicauthentication.UnresolvedVariable

Hata yanıtı gövdesi

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

Örnek hata mesajı

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

Neden

Bu hata, BasicAuthentication politikasının <Source> öğesinde belirtilen Base64 kodlu dizeyi içeren değişken şu durumlarda oluşur:

  • Kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz)
  • Çözülemiyor (tanımlanmamış)

Örneğin, BasicAuthentication politikasının <Source> öğesinde request.header.Authorization olarak belirtilen bir değişken varsa ancak yetkilendirme üstbilgisi API isteğinin bir parçası olarak iletilmiyorsa bu hata oluşur.

Teşhis

  1. BasicAuthentication politikasındaki <Source> öğesi için kullanılan değişkeni tanımlayın. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring, içinde <Source> öğesi için kullanılan değişken request.header.Authorization'dir:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Hatayı içeren API proxy'sindeki tüm BasicAuthentication politikalarını inceleyin. Bir veya daha fazla BasicAuthentication politikası olabilir. <Source> öğesinde belirtilen değişkenin, hata dizesinde tanımlanan değişken adıyla eşleştiği (yukarıdaki 1. adım) belirli BasicAuthentication politikasını veya politikalarını belirleyin.

    Örneğin, aşağıdaki politika <Source> öğesini, faultstring öğesindekiyle eşleşen request.header.Authorization adlı bir değişkene ayarlar:

    <?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. Değişkenin, BasicAuthentication politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılabilir olup olmadığını belirleyin.

  4. Değişken şu durumlarda:

    1. Kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz)
    2. Çözülemiyor (tanımlanmamış)

    Bu durumda hatanın nedeni budur.

    Yukarıda gösterilen BasicAuthentication politikasında, request.header.Authorization değişkeni isteğin bir parçası olarak iletilmedi. Yani API isteği, aşağıdaki örnekte gösterildiği gibi Authorization başlığı olmadan yapıldı:

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

    BasicAuthentication politikasında kullanılan değişken kullanılamadığından şu hata kodunu alırsınız:

    steps.basicauthentication.UnresolvedVariable
    

Çözünürlük

BasicAuthentication politikasında kullanılan değişkenin tanımlandığından veya giriş olarak iletildiğinden ve politikanın yürütüldüğü akışta kullanılabilir olduğundan emin olun.

Yukarıda bahsedilen örnek BasicAuthentication politikasıyla ilgili sorunu düzeltmek için aşağıda gösterildiği gibi bir API isteğinde bulunun:

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

InvalidBasicAuthenticationSource

Hata kodu

steps.basicauthentication.InvalidBasicAuthenticationSource

Hata yanıtı gövdesi

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

Hata örneği Hata mesajı

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

Olası nedenler

Bu hatanın olası nedenleri şunlardır:

Neden Açıklama
Geçersiz kaynak değişkeni BasicAuthentication politikasına yönelik giriş kaynağı değişkeni, geçerli bir Base64 kodlu dize değil.
Başlık hatalı biçimlendirilmiş BasicAuthentication politikasına iletilen Base64 kodlu dizeyi içeren başlık hatalı biçimlendirilmiş.

Neden: Kaynak değişkeni geçersiz

Bu hata, BasicAuthentication politikasının <Source> öğesinde belirtilen Base64 kodlu dizeyi içeren değişkende geçerli bir değer yoksa oluşur.

Örneğin, BasicAuthentication politikasının <Source> öğesinde belirtilen değişken geçerli bir Base64 kodlu dizeye sahip değilse bu hata oluşur.

Teşhis

  1. BasicAuthentication politikasındaki <Source> öğesi için kullanılan değişkeni tanımlayın. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring, içinde <Source> öğesi için kullanılan değişken request.header.Authorization'dir:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Hatayı içeren API proxy'sindeki tüm BasicAuthentication politikalarını inceleyin. Bir veya daha fazla BasicAuthentication politikası olabilir. <Source> öğesinde belirtilen değişkenin, hata dizesinde tanımlanan değişken adıyla eşleştiği (yukarıdaki 1. adım) belirli BasicAuthentication politikalarını belirleyin.

    Örneğin, aşağıdaki politika <Source> öğesini, faultstring öğesindekiyle eşleşen request.header.Authorization adlı bir değişkene ayarlar:

    <?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> öğesinde belirtilen değişkende depolanan değer geçerli bir Base64 kodlu dize değilse hata bundan kaynaklanıyordur.

    Yukarıda gösterilen BasicAuthentication politikasında, istemci tarafından başlık olarak gönderilen request.header.Authorization değişkeni, aşağıda gösterildiği gibi geçersizdi:

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

    request.header.Authorization değişkeni, "23435"" adlı geçersiz bir Base64 kodlu dizeye sahip olduğundan şu hata kodunu alırsınız:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Çözünürlük

BasicAuthentication politikasındaki <Source> öğesi için belirtilen değişkende geçerli bir Base64 kodlu dize olduğundan emin olun.

Yukarıda bahsedilen örnek BasicAuthentication politikasıyla ilgili sorunu düzeltmek için aşağıdaki örnekte gösterildiği gibi, yetkilendirme üstbilgisinde geçerli bir Base64 kodlu dize ileterek bir API isteği gönderin:

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

Neden: Başlık hatalı/geçersiz

Bu hata, BasicAuthentication politikasına iletilen üstbilgi yanlış biçimlendirilmişse veya geçersizse oluşur.

Örneğin, BasicAuthentication politikasında <Source> öğesinde request.header.Authorization olarak belirtilen bir değişken varsa ve API isteğinin bir parçası olarak iletilen başlık hatalı/geçersizse bu hata oluşur.

Teşhis

  1. BasicAuthentication politikasındaki <Source> öğesi için kullanılan değişkeni tanımlayın. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki hatada <Source> öğesi için kullanılan değişken request.header.Authorization'dir:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Hatayı içeren API proxy'sindeki tüm BasicAuthentication politikalarını inceleyin. Bir veya daha fazla BasicAuthentication politikası olabilir. <Source> öğesinde belirtilen değişkenin, hata dizesinde tanımlanan değişken adıyla eşleştiği (yukarıdaki 1. adım) belirli BasicAuthentication politikalarını belirleyin.

    Örneğin, aşağıdaki politika <Source> öğesini, faultstring öğesindekiyle eşleşen request.header.Authorization adlı bir değişkene ayarlar:

    <?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. Değişken bir üstbilgi ise ve hatalı veya geçersizse (ör. kimlik doğrulama türü yoksa ya da kimlik doğrulama türü "Basic" değilse) hatanın nedeni budur.

    Yetkilendirme üstbilgisi şu biçimdedir:

    Authorization: <Authentication type> <credentials>
    

    Hatalı biçimlendirilmiş bir başlık, BasicAuthentication politikasına iki şekilde iletilebilir:

    Örnek 1: Başlıkta kimlik doğrulama türü yok:

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

    Yukarıdaki örnekte, yetkilendirme başlığında kimlik doğrulama türü yok. Bu başlık yukarıda gösterilen BasicAuthentication politikasına iletilirse şu hata kodunu alırsınız:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    2. örnek: Kimlik doğrulama türü "Temel" türünde değil:

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

    Yukarıdaki örnekte, Yetkilendirme başlığında "Temel" kimlik doğrulama türü yok. Bu, yukarıda gösterilen BasicAuthentication politikasına iletilirse şu hata kodunu alırsınız:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Benzer şekilde, yetkilendirme üstbilgisinde Bearer, Digest Auth gibi bir kimlik doğrulama türü kullanılıyorsa da bu hata oluşabilir.

Çözünürlük

BasicAuthentication politikasına girişin iletildiği başlığın kimlik doğrulama türüne sahip olduğundan ve türünün "Basic" olduğundan emin olun.

Yukarıda bahsedilen örnek BasicAuthentication politikasıyla ilgili sorunu düzeltmek için aşağıdaki örnekte gösterildiği gibi, yetkilendirme üstbilgisinde "Basic" kimlik doğrulama türüyle geçerli bir Base64 kodlu dizeyi ileterek bir API isteği gönderin:

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