Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
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'yi Çöz politikasındaki <Source>
öğesinde belirtilen JSON Web Token (JWT) hatalı, geçersiz veya başka bir şekilde kod çözülemezse ortaya çıkar.
Düzgün yapılandırılmış bir JWT, aşağıdaki biçimde bir başlık, yük ve imza içermelidir: header.payload.signature
. DecodeJWT politikasına iletilen JWT'de bileşen parçası eksikse hatayı alırsınız. Örneğin, JWT'de yalnızca payload.signature
varsa ancak header
eksikse hata meydana gelir.
Teşhis
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, Authorization istek başlığında yer almalıdır.
1. Adım'da tanımlanan değişkeni inceleyin ve içerdiği JWT'nin geçerli olup olmadığını kontrol edin. Giriş JWT'si geçerli değilse hatanın nedeni budur.
Aşağıdaki örnek API isteğinde, giriş JWT'si Yetkilendirme istek başlığında iletilir:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
JWT'nin ayrıntılı incelenmesi, geçersiz olan
payload.signature
biçimine sahip olduğunu gösterir. JWT'nin beklenen biçimiheader.payload.signature
. 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
JWT'nin Kodu Çözme Politikası'na iletildiğinden, üç öğenin de bu JWT'de bulunduğundan, JWT'nin doğru şekilde biçimlendirildiğinden ve kodu çözülebildiğinden emin olun.
Yukarıda gösterilen örneği düzeltmek için header.payload.signature
biçiminde geçerli bir JWT iletebilirsiniz. Bunu, cURL komutunu kullanarak API çağrısı yaparak yapabilirsiniz:
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'yi Çözme politikasının <Source>
öğesinde belirtilen akış değişkeni aşağıdaki durumlarda oluşur:
- kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemez (tanımlanmamıştır)
Teşhis
JWT Kodunu Çözme politikasının
<Source>
öğesinde belirtilen değişkeni tanımlayın. Bu değişken JWT'yi içermelidir.Aşağıda, JWT'yi Kod Çözme 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.
1. adımda tanımlanan değişkenin, JWT'nin kodunu çözme politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılıp kullanılamadığını belirleyin.
Değişken şu durumlarda:
- kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemez (tanımlanmamıştır)
hatanın nedeni budur.
Aşağıdaki örnek API isteğinde, JWT kullanıcı tarafından yetkilendirme isteği başlığında iletilmiyor.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Yetkilendirme isteği üst bilgisi iletilmediği için JWT'yi Kod Çözme politikası aşağıdaki hatayla başarısız olur:
"faultstring": "Invalid token: policy({0})"
Çözünürlük
JWT'nin kodunu çözme politikasının <Source>
öğesinde atıfta bulunulan değişkenin tanımlandığından, geçerli (kodu çözülebilen) bir JWT içerdiğinden ve JWT'nin kodunu çözme politikasının yürütüldüğü belirli akışta kullanılabildiğinden 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"