Memecahkan masalah error runtime JWT

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

FailedToDecode

Kode error

steps.jwt.FailedToDecode

Isi respons error

{
  "fault": {
    "faultstring": "Failed to Decode Token: policy({0})",
    "detail": {
       "errorcode": "steps.jwt.FailedToDecode"
     }
  }
}

Penyebab

Error ini terjadi jika JSON Web Token (JWT) yang ditentukan dalam elemen <Source> dari kebijakan Decode JWT salah format, tidak valid, atau tidak dapat didekode.

JWT yang terstruktur dengan benar harus berisi header, payload, dan tanda tangan dalam format berikut: header.payload.signature. Jika JWT yang diteruskan ke kebijakan DecodeJWT tidak memiliki bagian komponen, Anda akan mendapatkan error. Misalnya, jika JWT hanya memiliki payload.signature, tetapi tidak memiliki header, error akan terjadi.

Diagnosis

  1. Identifikasi variabel yang ditentukan dalam elemen <Source> dari kebijakan Decode JWT. Variabel ini harus berisi JWT.

    Berikut adalah contoh kebijakan Decode JWT:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    Dalam contoh di atas, JWT harus ada di header permintaan Otorisasi.

  2. Periksa variabel yang diidentifikasi di Langkah 1 dan periksa apakah JWT yang dikandungnya valid. Jika JWT input tidak valid, maka itulah penyebab errornya.

    Dalam contoh permintaan API di bawah, JWT input diteruskan di header permintaan Otorisasi:

    curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
    

    Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan perutean akses.

    Pemeriksaan JWT secara cermat menunjukkan bahwa JWT memiliki format payload.signature yang tidak valid. Format JWT yang diharapkan adalah header.payload.signature. Akibatnya, kebijakan Decode JWT gagal dengan error :

    "faultstring": "Failed to Decode Token: policy({0})"
    

Resolusi

Pastikan JWT yang diteruskan ke kebijakan Decode JWT berisi ketiga elemen, diformat dengan benar, dan dapat didekode.

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat meneruskan JWT yang valid dengan format header.payload.signature. Hal ini dapat dilakukan dengan melakukan panggilan API menggunakan perintah cURL sebagai berikut:

curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"

Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan perutean akses.

InvalidToken

Kode error

steps.jwt.InvalidToken

Isi respons error

{
  "fault": {
    "faultstring": "Invalid token: policy({0})",
    "detail": {
      "errorcode": "steps.jwt.InvalidToken"
     }
  }
}

Penyebab

Error ini terjadi jika variabel alur yang ditentukan dalam elemen <Source> kebijakan Decode JWT adalah:

  • di luar cakupan (tidak tersedia dalam alur tertentu tempat kebijakan dijalankan) atau
  • tidak dapat diselesaikan (tidak ditentukan)

Diagnosis

  1. Identifikasi variabel yang ditentukan dalam elemen <Source> dari kebijakan Decode JWT. Variabel ini harus berisi JWT.

    Berikut adalah contoh kebijakan Decode JWT:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    Dalam contoh di atas, header permintaan Otorisasi harus berisi JWT.

  2. Tentukan apakah variabel yang diidentifikasi di Langkah 1 ditentukan dan tersedia dalam alur tempat kebijakan Decode JWT dijalankan.

  3. Jika variabelnya adalah:

    • di luar cakupan (tidak tersedia dalam alur tertentu tempat kebijakan dijalankan) atau
    • tidak dapat diselesaikan (tidak ditentukan)

    maka itulah penyebab error.

    Dalam contoh permintaan API di bawah, JWT tidak diteruskan di header permintaan otorisasi oleh pengguna.

    curl -v "http://$EXTERNAL_IP/v1/decodeJWT"
    

Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan perutean akses.

Because the authorization request header is not passed, the Decode JWT policy fails with the error:

```
"faultstring": "Invalid token: policy({0})"
```

Resolusi

Pastikan variabel yang dirujuk dalam elemen <Source> dari kebijakan Decode JWT ditentukan, berisi JWT yang valid (dapat didekode), dan tersedia dalam alur tertentu tempat kebijakan Decode JWT sedang dieksekusi.

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat meneruskan JWT yang valid di header otorisasi permintaan. Hal ini dapat dilakukan dengan melakukan panggilan API menggunakan perintah cURL sebagai berikut:

curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"

Dengan $EXTERNAL_IP adalah alamat IP load balancer eksternal. Alamat IP ini terekspos ke internet. Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan perutean akses.