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

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
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, JWT Kodunu Çözme politikasının <Source> öğesinde belirtilen JSON Web Jetonu (JWT) hatalı biçimlendirilmiş, geçersiz veya başka bir şekilde kodu çözülemezse ortaya çıkar.

Düzgün 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 bileşen bölümü eksikse bu hatayı alırsınız. Örneğin, JWT'de yalnızca payload.signature varsa ancak header eksikse hata oluşur.

Teşhis

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

    JWT Kodunu Çözme politikası için örnek aşağıda 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, JWT girişi, Yetkilendirme isteği başlığında iletilir:

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

    JWT'nin yakından incelenmesi, payload.signature biçiminde geçersiz olduğunu göstermektedir. JWT'nin header.payload.signature biçimi kullanılması beklenmektedir. Sonuç olarak, JWT Kodunu Çö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. Bu işlem, cURL komutunu kullanarak API çağrısını aşağıdaki gibi yaparak 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 Kodunu Çözme politikasının <Source> öğesinde belirtilen akış değişkeni şöyle olduğunda ortaya çıkar:

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

Teşhis

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

    JWT Kodunu Çözme politikası için örnek aşağıda 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 tanımlı olup olmadığını ve JWT kodunu çözme politikasının yürütüldüğü akışta 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ımlanmamış)

    hatanın nedeni budur.

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

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

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

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

Çözünürlük

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

Yukarıda gösterilen örneği düzeltmek için istek yetkilendirme başlığında geçerli bir JWT iletebilirsiniz. Bu işlem, cURL komutunu kullanarak API çağrısını aşağıdaki gibi yaparak yapılabilir:

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