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, Decode JWT politikasının <Source> öğesinde belirtilen JSON Web Token (JWT) hatalı biçimlendirilmişse, geçersizse veya başka bir şekilde kod çözme işlemi yapılamıyorsa oluşur.
Doğru şekilde 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 bir bileşen parçası eksikse bu hatayı alırsınız. Örneğin, JWT'de yalnızca payload.signature varsa ancak header eksikse hata oluşur.
Teşhis
Decode JWT politikasının
<Source>öğesinde belirtilen değişkeni tanımlayın. Bu değişken JWT'yi içermelidir.Aşağıda örnek bir Decode JWT politikası 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ımda 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 Authorization istek 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.signaturebiçiminde olduğunu ve bu biçimin geçersiz olduğunu gösteriyor. JWT'nin beklenen biçimiheader.payload.signatureşeklindedir. Bu nedenle, JWT'yi Çözme politikası şu hatayla başarısız olur :"faultstring": "Failed to Decode Token: policy({0})"
Çözünürlük
JWT'nin Decode JWT politikasına iletildiğinden, üç öğenin tamamını içerdiğinden, doğru şekilde biçimlendirildiğinden ve kodunun çözülebileceğinden emin olun.
Yukarıda gösterilen örneği düzeltmek için header.payload.signature biçiminde geçerli bir JWT iletebilirsiniz. Bu işlem, cURL komutu kullanılarak aşağıdaki gibi API çağrısı yapılarak gerçekleştirilebilir:
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 şu durumlarda oluşur:
- kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözümlenemiyor (tanımlanmamış)
Teşhis
Decode JWT politikasının
<Source>öğesinde belirtilen değişkeni tanımlayın. Bu değişken JWT'yi içermelidir.Aşağıda örnek bir Decode JWT politikası 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, Decode JWT politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılabilir olup olmadığını belirleyin.
Değişken şu durumlarda:
- kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözümlenemiyor (tanımlanmamış)
Bu durumda 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 başlığı iletilmediğinden, JWT'yi Çözme politikası şu hatayla başarısız olur:
"faultstring": "Invalid token: policy({0})"
Çözünürlük
Decode JWT politikasının <Source> öğesinde referans verilen değişkenin tanımlandığından, geçerli (kod çözülebilir) bir JWT içerdiğinden ve Decode JWT politikasının yürütüldüğü 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 komutu kullanılarak aşağıdaki gibi API çağrısı yapılarak gerçekleştirilebilir:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"