JWT çalışma zamanı hatasının kodunu çözme

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

FailedToDecode

Hata kodu

steps.jwt.FailedToDecode

Hata yanıtı gövdesi

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

Neden

Bu hata, Kod Çözme JWT politikasının <Source> öğesinde belirtilen JSON Web Jetonu (JWT) hatalı biçimlendirilmiş, geçersizse veya kodu çözülebilir değilse ortaya çıkar.

Doğru yapılandırılmış bir JWT, şu biçimde bir başlık, yük ve imza içermelidir: header.payload.signature. DecodeJWT politikasına iletilen JWT'de bir bileşen parçası eksikse hatayı alırsınız. Örneğin, JWT'de yalnızca payload.signature varsa ancak header değeri eksikse hata meydana gelir.

Teşhis

  1. Kod Çözme JWT politikasının <Source> öğesinde belirtilen değişkeni tanımlayın. Bu değişken JWT'yi içermelidir.

    Aşağıda, kod çözme JWT politikası örneği verilmiştir:

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

    Yukarıdaki örnekte JWT, Yetkilendirme isteği başlığında yer almalıdır.

  2. 1. Adım'da tanımlanan değişkeni inceleyin ve içerdiği JWT'nin geçerli olup olmadığını kontrol edin. JWT girişi geçerli değilse hatanın nedeni budur.

    Aşağıdaki örnek API isteğinde, Yetkilendirme isteği başlığında giriş JWT'si iletilir:

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

    JWT'nin yakından incelenmesi, geçersiz olan payload.signature biçimine sahip olduğunu gösteriyor. JWT'nin beklenen biçimi header.payload.signature şeklindedir. Sonuç olarak, JWT Kodu Çözme politikası şu hatayı vererek başarısız olur :

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

Çözünürlük

Kod Çözme JWT politikasına iletilen JWT'nin üç öğenin tümünü içerdiğinden, doğru biçimlendirildiğinden ve kodu çözülebilir olduğundan emin olun.

Yukarıda gösterilen örneği düzeltmek için header.payload.signature biçiminde geçerli bir JWT gönderebilirsiniz. Bunun için cURL komutu kullanılarak API çağrısı şu şekilde yapılabilir:

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

InvalidToken

Hata kodu

steps.jwt.InvalidToken

Hata yanıtı gövdesi

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

Neden

Bu hata, JWT Kodu Çözme politikasının <Source> öğesinde belirtilen akış değişkeni şu durumda ortaya çıkar:

  • kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
  • çözülemiyor (tanımlanmadı)

Teşhis

  1. Kod Çözme JWT politikasının <Source> öğesinde belirtilen değişkeni tanımlayın. Bu değişken JWT'yi içermelidir.

    Aşağıda, kod çözme JWT politikası örneği verilmiştir:

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

    Yukarıdaki örnekte, Yetkilendirme isteği başlığı JWT'yi içermelidir.

  2. 1. Adım'da tanımlanan değişkenin, kod Çözme JWT politikasının yürütüleceği akışta tanımlı ve kullanılabilir olup olmadığını belirleyin.

  3. Değişken şunlardan biriyse:

    • kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
    • çözülemiyor (tanımlanmadı)

    hatanın nedeni budur.

    Aşağıdaki örnek API isteğinde JWT, yetkilendirme isteği başlığında kullanıcı tarafından iletilmez.

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

    Yetkilendirme isteği başlığı iletilmediği için Kod Çözme JWT politikası şu hatayı vererek başarısız olur:

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

Çözünürlük

Kod Çözme JWT politikasının <Source> öğesinde başvurulan değişkenin tanımlandığından, geçerli (kod çözülebilir) bir JWT içerdiğinden ve Kodu Çözme JWT politikasının yürütüldüğü belirli akışta mevcut olduğundan emin olun.

Yukarıda gösterilen örneği düzeltmek için istek yetkilendirme başlığında geçerli bir JWT geçirebilirsiniz. Bunun için cURL komutu kullanılarak API çağrısı şu şekilde yapılabilir:

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