أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
FailedToDecode
رمز الخطأ
steps.jwt.FailedToDecode
نص استجابة الخطأ
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
السبب
يحدث هذا الخطأ إذا كان رمز JSON المميّز للويب (JWT) المحدّد في العنصر <Source>
من سياسة فك ترميز JWT غير صالح أو غير صالح أو غير قابل للترميز.
يجب أن يحتوي JWT ذو البنية السليمة على عنوان وحمولة وتوقيع بالتنسيق التالي: header.payload.signature
. إذا كان JWT الذي تم تمريره إلى سياسة فك ترميز JWT ينقصه جزء من المكوِّن، سيظهر لك خطأ. على سبيل المثال، إذا كان JWT يحتوي على payload.signature
فقط، ولكنّه لا يتضمّن header
، سيحدث الخطأ.
التشخيص
تحديد المتغيّر المحدّد في العنصر
<Source>
ضمن سياسة فك ترميز JWT يجب أن يحتوي هذا المتغير على JWT.في ما يلي نموذج لسياسة JWT لفك ترميز المحتوى:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
في المثال أعلاه، يجب تضمين JWT في عنوان طلب التفويض.
افحص المتغير المحدد في الخطوة 1 وتحقَّق لمعرفة ما إذا كان JWT الذي يحتوي عليه صالحًا. إذا كان مدخل JWT غير صالح، فهذا هو سبب الخطأ.
في مثال طلب واجهة برمجة التطبيقات أدناه، يتم تمرير إدخال JWT في عنوان طلب التفويض:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
يشير الفحص الدقيق إلى JWT إلى أنّ تنسيقه
payload.signature
غير صالح. التنسيق المتوقع لـ JWT هوheader.payload.signature
. نتيجةً لذلك، يتعذّر تنفيذ سياسة فك ترميز JWT مع ظهور الخطأ :"faultstring": "Failed to Decode Token: policy({0})"
الدقة
يُرجى التأكَّد من أنّ ملف JWT الذي تم تمريره إلى سياسة فك ترميز JWT يحتوي على العناصر الثلاثة جميعها وأنّه يمكن تنسيقه بشكل صحيح ويمكن فك ترميزه.
لتصحيح المثال الموضح أعلاه، يمكنك تمرير JWT صالح بالتنسيق header.payload.signature
. ويمكن إجراء ذلك من خلال طلب بيانات من واجهة برمجة التطبيقات باستخدام الأمر cURL على النحو التالي:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
رمز الخطأ
steps.jwt.InvalidToken
نص استجابة الخطأ
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
السبب
يحدث هذا الخطأ إذا كان متغيّر التدفق المحدّد في العنصر <Source>
في سياسة فك ترميز JWT هو:
- خارج النطاق (لا تتوفّر خلال المسار المحدّد الذي يتم فيه تنفيذ السياسة)
- يتعذّر حلها (غير محدّد)
التشخيص
تحديد المتغيّر المحدّد في العنصر
<Source>
ضمن سياسة فك ترميز JWT يجب أن يحتوي هذا المتغير على JWT.في ما يلي نموذج لسياسة JWT لفك ترميز المحتوى:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
في المثال أعلاه، يجب أن يحتوي عنوان طلب التفويض على JWT.
يمكنك تحديد ما إذا كان المتغيّر المحدَّد في الخطوة 1 محدّدًا ومتاحًا في التدفق الذي يتم فيه تنفيذ سياسة فك ترميز JWT.
إذا كان المتغيّر إما:
- خارج النطاق (لا تتوفّر خلال المسار المحدّد الذي يتم فيه تنفيذ السياسة)
- يتعذّر حلها (غير محدّد)
فهذا هو سبب الخطأ.
في مثال طلب واجهة برمجة التطبيقات أدناه، لا يمرّر المستخدم JWT في عنوان طلب التفويض.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
بسبب عدم تمرير عنوان طلب التفويض، يتعذّر تنفيذ سياسة فك ترميز JWT مع ظهور الخطأ:
"faultstring": "Invalid token: policy({0})"
الدقة
تأكَّد من أنّ المتغيّر المُشار إليه في العنصر <Source>
ضمن سياسة فك ترميز JWT محدّدًا، وأنّه يحتوي على ملف JWT صالح (قابل لفك ترميزه) ويتوفّر في المسار المحدّد الذي يتم فيه تنفيذ سياسة فك ترميز JWT.
لتصحيح المثال الموضح أعلاه، يمكنك تمرير JWT صالح في عنوان تفويض الطلب. ويمكن إجراء ذلك من خلال طلب بيانات من واجهة برمجة التطبيقات باستخدام الأمر cURL على النحو التالي:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"