Pemecahan masalah error runtime kebijakan BasicAuthentication

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

UnresolvedVariable

Kode error

steps.basicauthentication.UnresolvedVariable

Isi respons error

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

Contoh Pesan Error

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

Penyebab

Error ini terjadi jika variabel yang berisi string berenkode Base64 yang ditentukan dalam elemen <Source> pada kebijakan BasicAuthentication adalah:

  • Di luar cakupan (tidak tersedia di alur tertentu tempat kebijakan sedang dijalankan)
  • Tidak dapat diselesaikan (tidak ditentukan)

Misalnya, error ini terjadi jika kebijakan BasicAuthentication memiliki variabel yang ditentukan sebagai request.header.Authorization dalam elemen <Source>, tetapi header Otorisasi tidak diteruskan sebagai bagian dari permintaan API.

Diagnosis

  1. Identifikasi variabel yang digunakan untuk elemen <Source> dalam kebijakan BasicAuthentication. Anda dapat menemukan informasi ini dalam elemen faultstring respons error. Misalnya, dalam faultstring, berikut, variabel yang digunakan untuk elemen <Source> adalah request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Periksa semua kebijakan BasicAuthentication di Proxy API tertentu yang mengalami kegagalan. Mungkin ada satu atau beberapa kebijakan BasicAuthentication. Identifikasi kebijakan atau kebijakan BasicAuthentication tertentu yang variabel yang ditentukan dalam elemen <Source> cocok dengan nama variabel yang diidentifikasi di string kesalahan (langkah #1 di atas).

    Misalnya, kebijakan berikut menetapkan elemen <Source> ke variabel bernama request.header.Authorization, yang cocok dengan yang ada di 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. Menentukan apakah variabel telah ditetapkan dan tersedia pada alur tempat kebijakan BasicAuthentication dijalankan.

  4. Jika variabelnya:

    1. Di luar cakupan (tidak tersedia di alur tertentu tempat kebijakan sedang dijalankan)
    2. Tidak dapat diselesaikan (tidak ditentukan)

    Itulah penyebab error.

    Pada contoh kebijakan BasicAuthentication yang ditampilkan di atas, variabel request.header.Authorization tidak diteruskan sebagai bagian dari permintaan. Artinya, permintaan API dibuat tanpa header Otorisasi seperti yang ditunjukkan di bawah:

    curl -v "http://$EXTERNAL_IP/basicauth"

    Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk informasi selengkapnya, lihat Mengonfigurasi pemilihan rute.

    Karena variabel yang digunakan dalam kebijakan BasicAuthentication tidak tersedia, Anda akan menerima kode error:

    steps.basicauthentication.UnresolvedVariable
    

Resolusi

Pastikan variabel yang digunakan dalam kebijakan BasicAuthentication ditetapkan atau diteruskan sebagai input dan tersedia di alur tempat kebijakan dijalankan.

Untuk memperbaiki masalah pada contoh kebijakan BasicAuthentication yang dibahas di atas, buat permintaan API seperti yang ditunjukkan di bawah:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk informasi selengkapnya, lihat Mengonfigurasi pemilihan rute.

InvalidBasicAuthenticationSource

Kode error

steps.basicauthentication.InvalidBasicAuthenticationSource

Isi respons error

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

Contoh Pesan Error

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

Kemungkinan penyebab

Kemungkinan penyebab error ini adalah:

Penyebab Deskripsi
Variabel sumber tidak valid Variabel sumber input ke BasicAuthentication Policy bukan string berenkode Base64 yang valid.
Format header salah Header yang berisi string berenkode Base64 yang diteruskan ke kebijakan BasicAuthentication salah format.

Penyebab: Variabel sumber tidak valid

Error ini terjadi jika variabel yang berisi string berenkode Base64 yang ditentukan dalam elemen <Source> pada kebijakan BasicAuthentication tidak berisi nilai yang valid.

Misalnya, error ini terjadi jika variabel yang ditentukan dalam elemen <Source> kebijakan BasicAuthentication tidak memiliki string berenkode Base64 yang valid.

Diagnosis

  1. Identifikasi variabel yang digunakan untuk elemen <Source> dalam kebijakan BasicAuthentication. Anda dapat menemukan informasi ini dalam elemen faultstring respons error. Misalnya, dalam faultstring, berikut, variabel yang digunakan untuk elemen <Source> adalah request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Periksa semua kebijakan BasicAuthentication di Proxy API tertentu yang mengalami kegagalan. Mungkin ada satu atau beberapa kebijakan BasicAuthentication. Identifikasi kebijakan BasicAuthentication tertentu (ies) yang mana variabel yang ditentukan dalam elemen <Source> cocok dengan nama variabel yang diidentifikasi dalam string kesalahan (langkah #1 di atas).

    Misalnya, kebijakan berikut menetapkan elemen <Source> ke variabel bernama request.header.Authorization, yang cocok dengan yang ada di 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. Jika nilai yang disimpan dalam variabel yang ditentukan dalam elemen <Source> bukan string berenkode Base64 yang valid, itulah penyebab error tersebut.

    Pada contoh kebijakan BasicAuthentication yang ditampilkan di atas, variabel request.header.Authorization yang dikirim oleh klien sebagai header tidak valid seperti yang ditunjukkan di bawah ini:

    curl -v "http://$EXTERNAL_IP /basicauth" -H "Authorization: Basic 23435"

    Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk informasi selengkapnya, lihat Mengonfigurasi pemilihan rute.

    Karena variabel request.header.Authorization memiliki string berenkode Base64 "23435" yang tidak valid, Anda menerima kode error:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Resolusi

Pastikan variabel yang ditentukan untuk elemen <Source> dalam kebijakan BasicAuthentication memiliki string berenkode Base64 yang valid.

Untuk memperbaiki masalah pada contoh kebijakan BasicAuthentication yang dibahas di atas, buat permintaan API dengan meneruskan string berenkode Base64 yang valid di header Otorisasi seperti yang ditunjukkan di bawah ini:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk informasi selengkapnya, lihat Mengonfigurasi pemilihan rute.

Penyebab: Header salah format/tidak valid

Error ini terjadi jika header yang diteruskan ke kebijakan BasicAuthentication salah atau tidak valid.

Misalnya, error ini terjadi jika kebijakan BasicAuthentication memiliki variabel yang ditentukan sebagai request.header.Authorization dalam elemen <Source> dan header yang diteruskan sebagai bagian dari permintaan API salah format/tidak valid.

Diagnosis

  1. Identifikasi variabel yang digunakan untuk elemen <Source> dalam kebijakan BasicAuthentication. Anda dapat menemukan informasi ini dalam elemen faultstring respons error. Misalnya, dalam error berikut, variabel yang digunakan untuk elemen <Source> adalah request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Periksa semua kebijakan BasicAuthentication di Proxy API tertentu yang mengalami kegagalan. Mungkin ada satu atau beberapa kebijakan BasicAuthentication. Identifikasi kebijakan BasicAuthentication tertentu (ies) yang mana variabel yang ditentukan dalam elemen <Source> cocok dengan nama variabel yang diidentifikasi dalam string kesalahan (langkah #1 di atas).

    Misalnya, kebijakan berikut menetapkan elemen <Source> ke variabel bernama request.header.Authorization, yang cocok dengan yang ada di 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. Jika variabel adalah header dan memiliki format yang salah atau tidak valid, yaitu tidak memiliki jenis autentikasi atau jika jenis autentikasinya bukan "Dasar", itulah penyebab error.

    Header Otorisasi adalah formulir ini:

    Authorization: <Authentication type> <credentials>
    

    Header dengan format yang salah dapat diteruskan ke kebijakan BasicAuthentication dengan dua cara:

    Contoh 1: Tidak ada jenis Autentikasi di Header:

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: YWthc2g6MTIz"

    Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk informasi selengkapnya, lihat Mengonfigurasi pemilihan rute.

    Pada contoh di atas, header Authorization tidak memiliki jenis Authentication. Jika header ini diteruskan ke kebijakan BasicAuthentication yang ditunjukkan di atas, Anda akan menerima kode error:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Contoh 2: Jenis autentikasi bukan jenis "Dasar":

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk informasi selengkapnya, lihat Mengonfigurasi pemilihan rute.

    Pada contoh di atas, header Otorisasi tidak memiliki jenis Autentikasi "Dasar". Jika parameter ini diteruskan ke kebijakan BasicAuthentication yang ditunjukkan di atas, Anda akan menerima kode error:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Demikian pula, error ini juga dapat terjadi jika jenis Autentikasi seperti Bearer, Digest Auth, dll. digunakan di header Otorisasi.

Resolusi

Pastikan header yang meneruskan input ke kebijakan BasicAuthentication memiliki jenis Authentication dan berjenis "Basic".

Untuk memperbaiki masalah pada contoh kebijakan BasicAuthentication yang dibahas di atas, buat permintaan API dengan meneruskan string berenkode Base64 yang valid dengan jenis Authentication "Basic" di header Otorisasi seperti yang ditunjukkan di bawah ini:

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk informasi selengkapnya, lihat Mengonfigurasi pemilihan rute.