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

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
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 olarak kodlanmış dizeyi içeren değişken için aşağıdakilerden biri olduğunda ortaya çıkar:

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

Örneğin, bu hata; BasicAuthentication politikasında <Source> öğesinde request.header.Authorization olarak belirtilmiş bir değişken varsa ancak Yetkilendirme başlığı API isteğinin bir parçası olarak iletilmezse 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, içinde <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 ilgili API Proxy'sindeki tüm Temel Kimlik Doğrulama 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 eşleştiğini temel alan Temel Kimlik Doğrulaması politikasını veya politikalarını tanımlayın (yukarıdaki 1. adım).

    Ö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. Değişkenin, BasicAuthentication politikasının yürütüldüğü akışta tanımlı olup olmadığını ve kullanılabilir olup olmadığı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ümlenemiyor (tanımlanmamış)

    Hatanın nedeni budur.

    Yukarıda gösterilen örnek BasicAuthentication politikasında request.header.Authorization değişkeni, isteğin bir parçası olarak iletilmemiştir. Yani API isteği, aşağıda gösterildiği gibi Yetkilendirme 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

Temel Kimlik Doğrulama politikasında kullanılan değişkenin bir giriş olarak tanımlandığından veya iletildiğinden ve politikanın yürütüldiği akışta bulunduğundan emin olun.

Yukarıda açıklanan örnek Temel Kimlik Doğrulama 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şken BasicAuthentication Policy'nin giriş kaynağı değişkeni, Base64 olarak kodlanmış geçerli bir dize değil.
Başlık Yanlış Biçimlendirilmiş BasicAuthentication politikasına iletilen Base64 kodlu dizeyi içeren üstbilgi hatalı.

Neden: Geçersiz kaynak değişken

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şkenin geçerli bir Base64 olarak kodlanmış dizesi 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, 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. Hatanın oluştuğu ilgili API Proxy'sindeki tüm Temel Kimlik Doğrulama 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 örnek Temel Kimlik Doğrulama politikasında, istemci tarafından üstbilgi olarak gönderilen request.header.Authorization değişkeni aşağıda gösterildiği gibi geçersizdir:

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

    Değişkenin request.header.Authorizationile Base64 kodlu geçersiz bir dizesi ("23435"") olduğundan hata kodunu alırsınız:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Çözünürlük

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

Yukarıda açıklanan örnek Temel Kimlik Doğrulama politikasıyla ilgili sorunu düzeltmek için Yetkilendirme üst bilgisinde aşağıda gösterildiği gibi geçerli bir Base64 kodlamalı dize ileterek bir API isteğinde bulunun:

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

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

Bu hata, Temel Kimlik Doğrulama politikasına iletilen üstbilgi hatalı veya geçersizse ortaya çıkar.

Örneğin, BasicAuthentication politikasındaki <Source> öğesinde request.header.Authorization olarak belirtilmiş bir değişken varsa ve API isteğinin bir parçası olarak iletilen başlık hatalı veya geçersizse bu hata 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 ilgili API Proxy'sindeki tüm Temel Kimlik Doğrulama 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. Değişken bir üstbilgiyse ve hatalı biçimlendirilmiş ya da geçersizse (ör. kimlik doğrulama türüne sahip değilse veya kimlik doğrulama türü "Temel" değilse) hatanın nedeni budur.

    Yetkilendirme üstbilgisi şu biçimdedir:

    Authorization: <Authentication type> <credentials>
    

    Bozuk bir üstbilgi, 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 üstbilgisinde Kimlik Doğrulama türü yok. Bu üstbilgi, yukarıda gösterilen BasicAuthentication politikasına aktarılırsa şu hata kodunu alırsınız:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Örnek 2: Kimlik doğrulama türü "Temel" değil:

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

    Yukarıdaki örnekte, Yetkilendirme üstbilgisi "Temel" kimlik doğrulama türüne sahip değil. Bu, yukarıda gösterilen Temel Kimlik Doğrulama politikasına iletilirse 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

Temel Kimlik Doğrulama politikası girişinin iletildiği üstbilginin, Kimlik doğrulama türünde ve "Temel" türünde olduğundan emin olun.

Yukarıda açıklanan örnek BasicAuthentication politikasıyla ilgili sorunu düzeltmek için "Basic" ile Base64 olarak kodlanmış geçerli bir dize ileterek API isteği gönderin. Aşağıda gösterildiği gibi, Yetkilendirme üstbilgisindeki kimlik doğrulama türü:

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