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
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.
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'ninheader.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
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.
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.
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"