تحديد مشاكل أخطاء وقت تشغيل 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> من سياسة Decode 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. نتيجةً لذلك، يتعذّر تنفيذ سياسة Decode 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> من سياسة Decode JWT:

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

التشخيص

  1. حدِّد المتغيّر المحدّد في العنصر <Source> من سياسة Decode 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 معرَّفًا ومتاحًا في التدفق الذي يتم فيه تنفيذ سياسة Decode JWT

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

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

    عندها يكون هذا هو سبب الخطأ.

    في مثال طلب بيانات من واجهة برمجة التطبيقات أدناه، لا يمرّر المستخدم رمز JWT في عنوان طلب التفويض.

    curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
    

    بما أنّه لم يتم تمرير عنوان طلب التفويض، تتعذّر سياسة فك ترميز JWT ويظهر الخطأ التالي:

    "faultstring": "Invalid token: policy({0})"
    

الدقة

تأكَّد من أنّ المتغيّر المُشار إليه في العنصر <Source> من سياسة Decode JWT معرَّف ويتضمّن رمز JWT صالحًا (يمكن فك ترميزه) ومتوفّر في التدفق المحدّد الذي يتم فيه تنفيذ سياسة Decode JWT.

لتصحيح المثال الموضّح أعلاه، يمكنك تمرير رمز JWT صالح في عنوان تفويض الطلب. يمكن إجراء ذلك من خلال طلب البيانات من واجهة برمجة التطبيقات باستخدام الأمر cURL على النحو التالي:

curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"