Mendekode error error runtime JWT

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

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 Token Web JSON (JWT) yang ditentukan dalam elemen <Source> kebijakan Decode JWT memiliki format yang salah, tidak valid, atau tidak dapat didekode.

JWT yang terstruktur dengan baik 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> kebijakan Decode JWT. Variabel ini harus berisi JWT.

    Berikut ini contoh kebijakan Decode JWT:

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

    Pada contoh di atas, JWT harus berada di header permintaan Otorisasi.

  2. Periksa variabel yang diidentifikasi pada Langkah 1 dan periksa apakah JWT yang ada di dalamnya valid. Jika JWT input tidak valid, berarti itulah penyebab error.

    Pada contoh permintaan API di bawah ini, JWT input diteruskan di header permintaan Authorization:

    curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
    

    Pemeriksaan JWT lama menunjukkan bahwa format payload.signature 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 di-decode.

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

curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"

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 flow yang ditentukan dalam elemen <Source> kebijakan Decode JWT:

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

Diagnosis

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

    Berikut ini contoh kebijakan Decode JWT:

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

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

  2. Tentukan apakah variabel yang diidentifikasi pada Langkah 1 telah ditetapkan dan tersedia dalam alur tempat kebijakan Decode JWT dijalankan.

  3. Jika variabelnya adalah:

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

    maka itulah penyebab terjadinya {i>error<i}.

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

    curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
    

    Karena header permintaan otorisasi tidak diteruskan, kebijakan Decode JWT akan gagal dengan menampilkan error:

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

Resolusi

Pastikan variabel yang dirujuk dalam elemen <Source> kebijakan Decode JWT ditentukan, berisi JWT yang valid (dapat didecode) dan tersedia di flow tertentu tempat kebijakan Decode JWT dieksekusi.

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

curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"