يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
الموضوع
تفكّ ترميز JWT بدون التحقق من التوقيع على JWT. يكون هذا الإجراء مفيدًا بشكل أكبر عند استخدامه بالتوافق مع سياسة التحقّق من JWT عندما يكون من الضروري معرفة قيمة المطالبة من داخل JWT قبل التحقّق من توقيع JWT.
تعمل سياسة فك ترميز JWT بغض النظر عن الخوارزمية التي تم استخدامها لتوقيع JWT. يمكنك الاطّلاع على نظرة عامة على سياسات JWS وJWT للاطّلاع على مقدّمة مفصّلة.
حملة فيديو
شاهِد فيديو قصيرًا لمعرفة كيفية فك ترميز JWT.
النموذج: فك ترميز JWT
تفكّ السياسة المعروضة أدناه ترميز JWT في متغير التدفق var.jwt. ويجب أن يكون هذا المتغيّر متاحًا وأن يحتوي على رمز JWT صالح (قابل للفكه). يمكن للسياسة الحصول على JWT من أي متغيّر تدفق.
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>var.jwt</Source> </DecodeJWT>
تكتب السياسة مخرجاتها إلى متغيّرات السياق، بحيث يمكن للسياسات أو الشروط اللاحقة في الخادم الوكيل لواجهة برمجة التطبيقات فحص هذه القيم. يمكنك الاطّلاع على متغيّرات التدفق للحصول على قائمة بالمتغيّرات التي تم ضبطها من خلال هذه السياسة.
مرجع عنصر لفك ترميز JWT
يصف مرجع السياسة عناصر وسمات سياسة فك ترميز JWT.
السمات التي تنطبق على عنصر المستوى الأعلى
<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">
السمات التالية شائعة في جميع العناصر الرئيسية للسياسة.
السمة | الوصف | تلقائي | الحضور |
---|---|---|---|
اسم |
الاسم الداخلي للسياسة تقتصر الأحرف التي يمكنك استخدامها في الاسم على:
A-Z0-9._\-$ % . ومع ذلك، تفرض واجهة مستخدم إدارة Edge قيودًا إضافية، مثل الإزالة التلقائية للأحرف غير الأبجدية الرقمية.
ويمكنك اختياريًا استخدام العنصر |
لا ينطبق | مطلوبة |
continueOnError |
اضبط القيمة على false لعرض رسالة خطأ عند تعذُّر تنفيذ السياسة. وهو سلوك متوقّع لمعظم السياسات.
اضبط القيمة على |
false | إجراء اختياري |
مفعّلة |
اضبط القيمة على true لفرض السياسة.
اضبط القيمة على |
صحيح | إجراء اختياري |
async | تم إيقاف هذه السمة نهائيًا. | false | منهي العمل به |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
يمكن استخدامها بالإضافة إلى سمة الاسم لتصنيف السياسة في محرِّر الخادم الوكيل لواجهة المستخدم الإدارية باسم مختلف بلغة طبيعية.
تلقائي | إذا لم تستخدم هذا العنصر، يتم استخدام قيمة سمة الاسم الخاصة بالسياسة. |
الحضور | إجراء اختياري |
النوع | سلسلة |
<المصدر>
<Source>jwt-variable</Source>
في حال توفّره، تحدّد السياسة متغيّر التدفق الذي تتوقّع السياسة أن تجد فيه JWT لفك ترميزه.
تلقائي | request.header.authorization (اطّلِع على الملاحظة الواردة أعلاه للحصول على معلومات مهمة
عن الإعداد التلقائي). |
الحضور | إجراء اختياري |
النوع | سلسلة |
القيم الصالحة | اسم متغيّر تدفق الحافة |
متغيرات التدفق
بعد نجاح العملية، تضبط سياستا التحقّق من JWT وفك ترميز JWT متغيّرات السياق وفقًا للنمط التالي:
jwt.{policy_name}.{variable_name}
على سبيل المثال، إذا كان اسم السياسة jwt-parse-token
، ستخزّن السياسة الموضوع المحدّد في JWT في متغيّر السياق المسمى jwt.jwt-parse-token.decoded.claim.sub
.
(للتوافق مع الأنظمة القديمة، سيكون متاحًا أيضًا في jwt.jwt-parse-token.claim.subject
)
اسم المتغير | الوصف |
---|---|
claim.audience |
مطالبة جمهور JWT قد تكون هذه القيمة سلسلة أو مصفوفة من السلاسل. |
claim.expiry |
تاريخ/وقت انتهاء الصلاحية، معبرًا عنه بالمللي ثانية منذ البداية. |
claim.issuedat |
تاريخ إصدار الرمز المميّز بالمللي ثانية منذ البداية. |
claim.issuer |
مطالبة جهة إصدار JWT |
claim.notbefore |
إذا تضمّن JWT مطالبة nbf، سيحتوي هذا المتغيّر على القيمة معبرًا عنها بالملي ثانية منذ الحقبة. |
claim.subject |
مطالبة موضوع JWT |
claim.name |
قيمة المطالبة المحدّدة (عادية أو إضافية) في الحمولة سيتم ضبط إحدى هذه الطرق لكل مطالبة في الحمولة. |
decoded.claim.name |
القيمة القابلة للتحليل بتنسيق JSON للمطالبة المعنية (عادية أو إضافية) في الحمولة. يتم ضبط متغيّر واحد لكل مطالبة في الحمولة. على سبيل المثال، يمكنك استخدام decoded.claim.iat لاسترداد وقت إصدار JWT معبرًا عنه بالثواني منذ البداية. يمكنك
أيضًا استخدام متغيّرات مسار claim.name ، إلا أنّ هذا هو
المتغيّر الذي يُنصح باستخدامه للوصول إلى المطالبة. |
decoded.header.name |
القيمة القابلة للتحليل بتنسيق JSON لعنوان في الحمولة. يتم ضبط متغيّر واحد لكل عنوان في الحمولة. يمكنك أيضًا استخدام متغيّرات مسار header.name ،
إلا أنّ هذا هو المتغيّر المقترَح استخدامه للوصول إلى العنوان. |
expiry_formatted |
تاريخ/وقت انتهاء الصلاحية، منسَّق كسلسلة يمكن لشخص عادي قراءتها مثال: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
خوارزمية التوقيع المستخدمة في JWT. على سبيل المثال، RS256 وHS384 وما إلى ذلك. راجِع مَعلمة العنوان(Algorithm) لمعرفة المزيد. |
header.kid |
رقم تعريف المفتاح، إذا تمت إضافته عند إنشاء JWT. يمكنك الاطّلاع أيضًا على مقالة "استخدام مجموعة مفاتيح ويب JSON (JWKS)" في نظرة عامة على سياسات JWT للتأكّد من صحة JWT. اطّلِع على مَعلمة العنوان(معرّف المفتاح) لمزيد من المعلومات. |
header.type |
سيتم ضبطها على JWT . |
header.name |
قيمة العنوان المُسمّى (عادية أو إضافية). سيتم ضبط أحد هذه الإعدادات لكل عنوان إضافي في جزء العنوان من JWT. |
header-json |
العنوان بتنسيق JSON. |
is_expired |
صواب أم خطأ |
payload-claim-names |
مجموعة من المطالبات التي يدعمها فريق JWT |
payload-json |
الحمولة بتنسيق JSON.
|
seconds_remaining |
عدد الثواني قبل انتهاء صلاحية الرمز المميّز. وإذا انتهت صلاحية الرمز المميّز، سيكون هذا الرقم سالبًا. |
time_remaining_formatted |
الوقت المتبقي قبل انتهاء صلاحية الرمز المميّز، ويكون منسَّقًا كسلسلة يمكن لشخص عادي قراءتها مثال: 00:59:59.926 |
valid |
في حالة التحقّق من صحة التوقيع، سيكون هذا المتغيّر صحيحًا عند التحقُّق من التوقيع، ويكون الوقت الحالي قبل انتهاء صلاحية الرمز المميّز، وبعد قيمة "not before" في حال توفُّرها. وإلا false.
في حالة DecodeJWT، لا يتم تعيين هذا المتغير. |
مرجع الخطأ
يصف هذا القسم رموز الأخطاء ورسائل الخطأ التي يتم عرضها ومتغيرات الأخطاء التي تضبطها Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. هذه المعلومات مهمة لمعرفة ما إذا كنت تعمل على تطوير قواعد للأخطاء للتعامل معها. لمزيد من المعلومات، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن الأخطاء المتعلقة بالسياسات وأخطاء المعالجة.
أخطاء في وقت التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.
رمز الخطأ | رموز حالة HTTP | السبب | إصلاح |
---|---|---|---|
steps.jwt.FailedToDecode |
401 | يحدث ذلك عندما يتعذّر على السياسة فك ترميز JWT. قد يكون JWT مكتوبًا بصيغة غير صحيحة أو غير صالح أو غير قابل للفصل. | build |
steps.jwt.FailedToResolveVariable |
401 | يحدث ذلك عندما لا يكون متغيّر التدفق المحدّد في العنصر <Source> ضِمن
السياسة متوفّرًا. |
|
steps.jwt.InvalidToken |
401 | يحدث ذلك عندما يكون متغيّر التدفق المحدّد في العنصر <Source> ضمن السياسة خارج النطاق أو يتعذّر حلّه. |
build |
أخطاء النشر
يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.
اسم الخطأ | السبب | إصلاح |
---|---|---|
InvalidEmptyElement |
يحدث ذلك عندما لا يتم تحديد متغيّر التدفق الذي يحتوي على JWT المطلوب فك ترميزه في العنصر <Source> للسياسة.
|
build |
متغيرات الخطأ
ويتم ضبط هذه المتغيرات عند حدوث خطأ في وقت التشغيل. لمزيد من المعلومات، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن الأخطاء المتعلقة بالسياسات.
المتغيرات | المكان | مثال |
---|---|---|
fault.name="fault_name" |
fault_name هو اسم الخطأ، كما هو موضَّح في جدول أخطاء وقت التشغيل أعلاه. اسم الخطأ هو الجزء الأخير من رمز الخطأ. | fault.name Matches "TokenExpired" |
JWT.failed |
تحدِّد جميع سياسات JWT المتغيّر نفسه في حال تعذُّر التثبيت. | JWT.failed = true |
مثال على الردّ على الخطأ
بالنسبة إلى معالجة الأخطاء، أفضل ممارسة هي إدراج الجزء errorcode
من استجابة الخطأ. لا تعتمد على النص في faultstring
لأنه قد يتغير.
مثال لقاعدة خطأ
<FaultRules> <FaultRule name="JWT Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWT.failed=true</Condition> </FaultRule> </FaultRules>