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

يتم الآن عرض مستندات 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 ينقصه جزء من المكوّن إذا تم تمريره إلى سياسة 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 قد تم تحديده في الخطوة 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"