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

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

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 aşağıdakilerden biriyse ortaya çıkar:

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

Örneğin, BasicAuthentication politikasında <Source> öğesinde request.header.Authorization olarak belirtilen bir değişken varsa ancak Authorization başlığı API isteği kapsamında iletilmiyorsa bu hata meydana gelir.

Teşhis

  1. BasicAuthentication politikasında <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, öğesinde <Source> öğesi için kullanılan değişken request.header.Authorization'dir:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Hatanın oluştuğu belirli 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 belirli BasicAuthentication politikasını veya politikalarını belirleyin (yukarıdaki 1. adım).

    Ö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ılıp kullanılamayacağını belirleyin.

  4. Değişken şunlardan biriyse:

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

    O halde hatanın nedeni budur.

    Yukarıda gösterilen BasicAuthentication politikası örneğinde, request.header.Authorization değişkeni istek kapsamında iletilmemiştir. Yani API isteği, aşağıda gösterildiği gibi Authorization başlığı olmadan yapılmıştır:

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

    Temel Kimlik Doğrulama 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ılabildiğinden emin olun.

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

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 TemelKimlikDoğrulama Politikası'nın giriş kaynağı değişkeni, geçerli bir Base64 kodlu dize değil.
Başlık Biçimi Bozuk BasicAuthentication politikasına iletilen Base64 kodlu dizeyi içeren başlık hatalı biçimlendirilmiş.

Neden: Geçersiz kaynak değişkeni

Bu hata, BasicAuthentication politikasının <Source> öğesinde belirtilen Base64 olarak kodlanmış dizeyi içeren değişken geçerli bir değer içermiyorsa ortaya çıkar.

Örneğin, bu hata, BasicAuthentication politikasının <Source> öğesinde belirtilen değişkende geçerli bir Base64 kodlu dize yoksa ortaya çıkar.

Teşhis

  1. BasicAuthentication politikasında <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, öğesinde <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. Hatanın oluştuğu belirli API Proxy'sindeki tüm BasicAuthentication politikalarını inceleyin. Bir veya daha fazla Temel Kimlik Doğrulama politikası olabilir. <Source> öğesinde belirtilen değişkenin, hata dizesinde tanımlanan değişken adıyla (yukarıdaki 1. adım) eşleştiğini Temel Kimlik Doğrulama politikasını (ies) tanımlayın.

    Örneğin, aşağıdaki politika <Source> öğesini request.header.Authorization adlı ve faultstring ile eşleşen 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 Base64 olarak kodlanmış geçerli bir dize değilse hatanın nedeni budur.

    Yukarıda gösterilen BasicAuthentication politikası örneğinde, 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şkeninde geçersiz bir Base64 kodlu dize ("23435"") bulunduğundan aşağıdaki hata kodunu alırsınız:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Çözünürlük

BasicAuthentication politikasında <Source> öğesi için belirtilen değişkenin geçerli bir Base64 kodlu dizeye sahip olduğundan emin olun.

Yukarıda açıklanan örnek BasicAuthentication politikasıyla ilgili sorunu düzeltmek için aşağıdaki gibi Authorization üst bilgisine geçerli bir Base64 kodlamalı dize göndererek bir API isteği gönderin:

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

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

Bu hata, BasicAuthentication politikasına iletilen üstbilgi hatalı veya geçersizse ortaya çıkar.

Örneğin, bu hata BasicAuthentication politikasında<Source> öğesinde request.header.Authorization olarak belirtilen bir değişken varsa ve API isteği kapsamında iletilen başlık hatalı biçimlendirilmişse/geçersizse ortaya çıkar.

Teşhis

  1. BasicAuthentication politikasında <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:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Hatanın oluştuğu belirli 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 belirli BasicAuthentication politikalarını (politikaları) tanımlayın (yukarıdaki 1. adım).

    Ö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 üstbilgiyse ve bozuk veya geçersizse (ör. kimlik doğrulama türü yoksa veya kimlik doğrulama türü "Temel" değilse) hata bununla ilgilidir.

    Yetkilendirme üst bilgisi şu biçimdedir:

    Authorization: <Authentication type> <credentials>
    

    Bozuk bir üstbilgi, BasicAuthentication politikasına iki şekilde iletilebilir:

    1. örnek: Üstbilgide kimlik doğrulama türü yok:

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

    Yukarıdaki örnekte, Authorization başlığında Authentication türü yoktur. Bu üstbilgi, 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" değildir:

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

    Yukarıdaki örnekte, Authorization üstbilgisinde "Temel" kimlik doğrulama türü yoktur. Bu, yukarıda gösterilen BasicAuthentication politikasına iletilirse aşağıdaki hata kodunu alırsınız:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Benzer şekilde, bu hata, Yetkilendirme başlığında Taşıyıcı, Özet Kimlik Doğrulama gibi bir Kimlik Doğrulama türü kullanıldığında da ortaya çıkabilir.

Çözünürlük

BasicAuthentication politikasına girişin aktarıldığı üstbilginin Authentication türüne sahip olduğundan ve "Basic" türü olduğundan emin olun.

Yukarıda açıklanan örnek BasicAuthentication politikasıyla ilgili sorunu düzeltmek için, aşağıdaki gibi Authorization üstbilgisinde "Basic" kimlik doğrulama türüne sahip 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"