تحديد مشاكل أخطاء وقت تشغيل JWT وحلّها

أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

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 الذي تم تمريره إلى سياسة DecodeJWT لا يتضمّن جزءًا من المكوّن، ستظهر لك رسالة الخطأ. على سبيل المثال، إذا كان رمز JWT يتضمّن payload.signature فقط، ولكنّه لا يتضمّن header، سيحدث الخطأ.

التشخيص

  1. تحديد المتغيّر المحدّد في العنصر <Source> ضمن سياسة فك ترميز JWT يجب أن يحتوي هذا المتغيّر على JWT.

    في ما يلي نموذج لسياسة فك ترميز JWT:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    في المثال أعلاه، يجب تضمين JWT في عنوان طلب التفويض.

  2. راجِع المتغيّر الذي تم تحديده في الخطوة 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 هو:

  • خارج النطاق (لا تتوفّر خلال المسار المحدّد الذي يتم فيه تنفيذ السياسة)
  • لا يمكن حلّه (لم يتم تحديده)

التشخيص

  1. تحديد المتغيّر المحدّد في العنصر <Source> ضمن سياسة فك ترميز JWT يجب أن يحتوي هذا المتغيّر على JWT.

    في ما يلي نموذج لسياسة فك ترميز JWT:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    في المثال أعلاه، يجب أن يحتوي عنوان طلب التفويض على JWT.

  2. حدِّد ما إذا كان المتغيّر المحدّد في الخطوة 1 محدّدًا ومتاحًا في العملية التي يتم فيها تنفيذ سياسة فك ترميز JWT.

  3. إذا كان المتغيّر:

    • خارج النطاق (غير متوفّر في المسار المحدّد الذي يتم تنفيذ السياسة فيه)
    • لا يمكن حلّه (لم يتم تحديده)

    هذا هو سبب الخطأ.

    في مثال طلب واجهة برمجة التطبيقات أدناه، لا يُرسل المستخدم رمز 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"