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
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.
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çimiheader.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
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.
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.
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"