أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
الأدوات المستخدمة
تتحقّق هذه السمة من التوقيع على رمز JWT الذي تم استلامه من العملاء أو الأنظمة الأخرى. تستخرج هذه السياسة أيضًا المطالبات إلى متغيرات السياق حتى تتمكّن السياسات أو الشروط اللاحقة من فحص هذه القيم لاتخاذ قرارات بشأن التفويض أو التوجيه. للحصول على مقدمة مفصّلة، يُرجى الاطّلاع على نظرة عامة على سياسات JWS وJWT.
عند تنفيذ هذه السياسة، يتحقّق Edge من توقيع رمز JWT، ومن أنّ رمز JWT صالح وفقًا لوقتَي انتهاء الصلاحية والبدء إذا كانا متوفّرَين. يمكن للسياسة اختياريًا التحقّق أيضًا من قيم مطالبات محدّدة في رمز JWT، مثل الموضوع أو الجهة المصدرة أو الجمهور أو قيمة المطالبات الإضافية.
إذا تم التحقّق من صحة رمز JWT وكان صالحًا، يتم استخراج جميع المطالبات الواردة في رمز JWT إلى متغيرات السياق لاستخدامها في السياسات أو الشروط اللاحقة، ويُسمح للمستخدم بمتابعة الطلب. إذا تعذّر التحقّق من توقيع رمز JWT أو إذا كان رمز JWT غير صالح بسبب أحد الطوابع الزمنية، تتوقف جميع عمليات المعالجة ويتم عرض رسالة خطأ في الرد.
للتعرّف على أجزاء رمز JWT وكيفية تشفيرها وتوقيعها، يُرجى الرجوع إلى RFC7519.
فيديو
شاهِد فيديو قصيرًا للتعرّف على كيفية التحقّق من صحة التوقيع على رمز JWT.
العيّنات
- التحقّق من صحة رمز JWT موقَّع باستخدام خوارزمية HS256
- التحقّق من صحة رمز JWT موقَّع باستخدام خوارزمية RS256
التحقّق من صحة رمز JWT مميّز موقَّع باستخدام خوارزمية HS256
تتحقّق سياسة المثال هذه من رمز JWT مميّز تم توقيعه باستخدام خوارزمية التشفير HS256، أي HMAC، باستخدام مجموع اختباري SHA-256. يتم تمرير رمز JWT في طلب الخادم الوكيل باستخدام مَعلمة نموذجية باسم jwt. يتم تضمين المفتاح في متغيّر باسم private.secretkey.
يمكنك مشاهدة الفيديو أعلاه للحصول على مثال كامل، بما في ذلك كيفية تقديم طلب إلى السياسة.
يتضمّن إعداد السياسة المعلومات التي يحتاجها Edge لفك تشفير رمز JWT وتقييمه، مثل مكان العثور على رمز JWT (في متغيّر تدفق محدّد في عنصر المصدر)، وخوارزمية التوقيع المطلوبة، ومكان العثور على المفتاح السري (المخزّن في متغيّر تدفق Edge، والذي يمكن استرداده من Edge KVM، على سبيل المثال)، ومجموعة من المطالبات المطلوبة وقيمها.
<VerifyJWT name="JWT-Verify-HS256">
<DisplayName>JWT Verify HS256</DisplayName>
<Algorithm>HS256</Algorithm>
<Source>request.formparam.jwt</Source>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<SecretKey encoding="base64">
<Value ref="private.secretkey"/>
</SecretKey>
<Subject>monty-pythons-flying-circus</Subject>
<Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
<Audience>fans</Audience>
<AdditionalClaims>
<Claim name="show">And now for something completely different.</Claim>
</AdditionalClaims>
</VerifyJWT>تكتب السياسة ناتجها إلى متغيرات السياق حتى تتمكّن السياسات أو الشروط اللاحقة في خادم وكيل واجهة برمجة التطبيقات من فحص هذه القيم. يمكنك الاطّلاع على متغيرات التدفق للحصول على قائمة بالمتغيرات التي تحدّدها هذه السياسة.
التحقّق من صحة رمز JWT موقَّع باستخدام خوارزمية RS256
تتحقّق سياسة المثال هذه من صحة رمز JWT المميز الذي تم توقيعه باستخدام خوارزمية RS256. لإثبات الملكية، عليك تقديم المفتاح العام. يتم تمرير رمز JWT في طلب الخادم الوكيل باستخدام مَعلمة نموذجية
اسمها jwt. يتم تضمين المفتاح العام في متغيّر باسم public.publickey.
يمكنك مشاهدة الفيديو أعلاه للحصول على مثال كامل، بما في ذلك كيفية تقديم طلب إلى السياسة.
راجِع مرجع العناصر للاطّلاع على تفاصيل حول المتطلبات والخيارات لكل عنصر في نموذج السياسة هذا.
<VerifyJWT name="JWT-Verify-RS256">
<Algorithm>RS256</Algorithm>
<Source>request.formparam.jwt</Source>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<PublicKey>
<Value ref="public.publickey"/>
</PublicKey>
<Subject>apigee-seattle-hatrack-montage</Subject>
<Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
<Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience>
<AdditionalClaims>
<Claim name="show">And now for something completely different.</Claim>
</AdditionalClaims>
</VerifyJWT>بالنسبة إلى الإعدادات أعلاه، يجب أن يتضمّن رمز JWT العنوان التالي:
{
"typ" : "JWT",
"alg" : "RS256"
}وهذه الحمولة …
{
"sub" : "apigee-seattle-hatrack-montage",
"iss" : "urn://apigee-edge-JWT-policy-test",
"aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a",
"show": "And now for something completely different."
}… سيتم اعتبارها صالحة، إذا كان من الممكن التحقّق من التوقيع باستخدام المفتاح العام المقدَّم.
رمز JWT يتضمّن العنوان نفسه ولكن مع الحمولة التالية …
{
"sub" : "monty-pythons-flying-circus",
"iss" : "urn://apigee-edge-JWT-policy-test",
"aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a",
"show": "And now for something completely different."
}… سيتم تحديد أنّها غير صالحة، حتى إذا كان يمكن التحقّق من التوقيع، لأنّ مطالبة "sub" المضمّنة في JWT لا تتطابق مع القيمة المطلوبة لعنصر "Subject" كما هو محدّد في إعدادات السياسة.
تكتب السياسة ناتجها إلى متغيرات السياق حتى تتمكّن السياسات أو الشروط اللاحقة في خادم وكيل واجهة برمجة التطبيقات من فحص هذه القيم. يمكنك الاطّلاع على متغيرات التدفق للحصول على قائمة بالمتغيرات التي تحدّدها هذه السياسة.
ضبط العناصر الرئيسية
تعتمد العناصر التي تستخدمها لتحديد المفتاح المستخدَم للتحقّق من صحة رمز JWT على الخوارزمية التي تختارها، كما هو موضّح في الجدول التالي:
| خوارزمية | العناصر الأساسية | |
|---|---|---|
| HS* |
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.secretkey"/> </SecretKey> |
|
| RS*, ES*, PS* | <PublicKey> <Value ref="rsa_public_key_or_value"/> </PublicKey> أو: <PublicKey> <Certificate ref="signed_cert_val_ref"/> </PublicKey> أو: <PublicKey> <JWKS ref="jwks_val_or_ref"/> </PublicKey> |
|
| *لمزيد من المعلومات حول متطلبات المفتاح، يُرجى الاطّلاع على لمحة عن خوارزميات تشفير التوقيع. | ||
مرجع العنصر
يصف مرجع السياسة عناصر وسمات سياسة Verify JWT.
ملاحظة: سيختلف الإعداد إلى حد ما حسب خوارزمية التشفير التي تستخدمها. راجِع الأمثلة للاطّلاع على أمثلة توضّح عمليات الضبط لحالات استخدام معيّنة.
السمات التي تنطبق على العنصر ذي المستوى الأعلى
<VerifyJWT name="JWT" continueOnError="false" enabled="true" async="false">
السمات التالية مشتركة بين جميع العناصر الرئيسية للسياسة.
| السمة | الوصف | تلقائي | التواجد |
|---|---|---|---|
| الاسم |
الاسم الداخلي للسياسة تقتصر الأحرف التي يمكنك استخدامها في الاسم على:
A-Z0-9._\-$ %. ومع ذلك، تفرض واجهة مستخدم إدارة Edge قيودًا إضافية، مثل إزالة الأحرف غير الأبجدية الرقمية تلقائيًا.
يمكنك اختياريًا استخدام العنصر |
لا ينطبق | مطلوب |
| continueOnError |
اضبط القيمة على false لعرض رسالة خطأ عند تعذُّر تنفيذ إحدى السياسات. وهذا السلوك متوقّع لمعظم السياسات.
اضبط القيمة على |
خطأ | اختياري |
| مفعّلة |
اضبطها على true لفرض السياسة.
اضبط القيمة على |
صحيح | اختياري |
| غير متزامن | تم إيقاف هذه السمة نهائيًا. | خطأ | منهي العمل به |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
استخدِم هذه السمة بالإضافة إلى سمة الاسم لتصنيف السياسة في أداة تعديل وكيل واجهة المستخدم الإدارية باستخدام اسم مختلف بلغة طبيعية.
| تلقائي | في حال حذف هذا العنصر، سيتم استخدام قيمة سمة اسم السياسة. |
| التواجد | اختياري |
| النوع | سلسلة |
<Algorithm>
<Algorithm>HS256</Algorithm>
تحدّد هذه السمة خوارزمية التشفير لتوقيع الرمز المميّز. تستخدم خوارزميات RS*/PS*/ES* مفتاحَي تشفير عام/خاص، بينما تستخدم خوارزميات HS* مفتاحًا سريًا مشتركًا. يُرجى الاطّلاع أيضًا على لمحة عن خوارزميات تشفير التوقيع.
يمكنك تحديد قيم متعددة مفصولة بفواصل. على سبيل المثال، "HS256, HS512" أو "RS256, PS256". ومع ذلك، لا يمكنك دمج خوارزميات HS* مع أي خوارزميات أخرى أو خوارزميات ES* مع أي خوارزميات أخرى لأنّها تتطلّب نوع مفتاح معيّنًا. يمكنك الجمع بين خوارزميات RS* وPS*.
| تلقائي | لا ينطبق |
| التواجد | مطلوب |
| النوع | سلسلة من القيم المفصولة بفواصل |
| القيم الصالحة | HS256 وHS384 وHS512 وRS256 وRS384 وRS512 وES256 وES384 وES512 وPS256 وPS384 وPS512 |
<Audience>
<Audience>audience-here</Audience> or: <Audience ref='variable-name-here'/>
تتحقّق السياسة من أنّ مطالبة الجمهور في JWT تطابق القيمة المحدّدة في الإعداد. إذا لم يكن هناك تطابق، ستعرض السياسة خطأ. تحدّد هذه المطالبة المستلمين الذين تم تصميم رمز JWT من أجلهم. هذا هو أحد المطالبات المسجّلة المذكورة في RFC7519.
| تلقائي | لا ينطبق |
| التواجد | اختياري |
| النوع | سلسلة |
| القيم الصالحة | متغيّر أو سلسلة في مسار سير العمل تحدّد الجمهور. |
<AdditionalClaims/Claim>
<AdditionalClaims> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> </AdditionalClaims> or: <AdditionalClaims ref='claim_payload'/>
تتحقّق هذه السمة من أنّ حمولة JWT تحتوي على المطالبات الإضافية المحدّدة وأنّ قيم المطالبات المؤكَّدة تتطابق.
يستخدم الادعاء الإضافي اسمًا ليس من بين أسماء الادعاءات العادية والمسجّلة في JWT. يمكن أن تكون قيمة المطالبة الإضافية سلسلة أو رقمًا أو قيمة منطقية أو خريطة أو مصفوفة. الخريطة هي ببساطة مجموعة من أزواج الاسم والقيمة. يمكن تحديد قيمة مطالبة من أي من هذه الأنواع بشكل صريح في إعدادات السياسة، أو بشكل غير مباشر من خلال مرجع إلى متغيّر سير العمل.
| تلقائي | لا ينطبق |
| التواجد | اختياري |
| النوع | سلسلة أو رقم أو قيمة منطقية أو خريطة |
| المصفوفة | اضبط القيمة على true للإشارة إلى ما إذا كانت القيمة عبارة عن مجموعة من الأنواع. القيمة التلقائية: false |
| القيم الصالحة | أي قيمة تريد استخدامها لمطالبة إضافية |
يأخذ العنصر <Claim> السمات التالية:
- name: (مطلوبة) تمثّل اسم المطالبة.
- ref: (اختياري) اسم متغيّر سير العمل. في حال توفّرها، ستستخدم السياسة قيمة هذا المتغيّر كعنصر. في حال تحديد كلّ من السمة ref وقيمة مطالبة صريحة، تكون القيمة الصريحة هي القيمة التلقائية، ويتم استخدامها إذا لم يتم حلّ متغيّر التدفق المشار إليه.
- type - (اختياري) إحدى القيم التالية: string (القيمة التلقائية) أو number أو boolean أو map
- array: (اختياري) اضبط القيمة على true للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. القيمة التلقائية: false.
عند تضمين العنصر <Claim>، يتم ضبط أسماء المطالبات بشكل ثابت عند إعداد السياسة. بدلاً من ذلك، يمكنك تمرير عنصر JSON لتحديد أسماء المطالبات.
بما أنّ كائن JSON يتم تمريره كمتغيّر، يتم تحديد أسماء المطالبات في وقت التشغيل.
على سبيل المثال:
<AdditionalClaims ref='json_claims'/>
حيث يحتوي المتغيّر json_claims على عنصر JSON بالصيغة التالية:
{ "sub" : "person@example.com", "iss" : "urn://secure-issuer@example.com", "non-registered-claim" : { "This-is-a-thing" : 817, "https://example.com/foobar" : { "p": 42, "q": false } } }
<AdditionalHeaders/Claim>
<AdditionalHeaders> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> <Claim name='claim4' ref='variable-name' type='string' array='true'/> </AdditionalHeaders>
تتحقّق هذه السمة من أنّ عنوان JWT يحتوي على أزواج اسم/قيمة المطالبة الإضافية المحدّدة ومن أنّ قيم المطالبة المؤكَّدة تتطابق.
يستخدم الادّعاء الإضافي اسمًا ليس من بين أسماء الادّعاءات المسجّلة والمعيارية في JWT. يمكن أن تكون قيمة المطالبة الإضافية سلسلة أو رقمًا أو قيمة منطقية أو خريطة أو مصفوفة. الخريطة هي ببساطة مجموعة من أزواج الاسم والقيمة. يمكن تحديد قيمة مطالبة من أي من هذه الأنواع بشكل صريح في إعدادات السياسة، أو بشكل غير مباشر من خلال مرجع إلى متغيّر سير العمل.
| تلقائي | لا ينطبق |
| التواجد | اختياري |
| النوع |
سلسلة (القيمة التلقائية) أو رقم أو قيمة منطقية أو خريطة يتم ضبط النوع تلقائيًا على "سلسلة" في حال عدم تحديد أي نوع. |
| المصفوفة | اضبط القيمة على true للإشارة إلى ما إذا كانت القيمة عبارة عن مجموعة من الأنواع. القيمة التلقائية: false |
| القيم الصالحة | أي قيمة تريد استخدامها لمطالبة إضافية |
يأخذ العنصر <Claim> السمات التالية:
- name: (مطلوبة) تمثّل اسم المطالبة.
- ref: (اختياري) اسم متغيّر سير العمل. في حال توفّرها، ستستخدم السياسة قيمة هذا المتغيّر كعنصر. في حال تحديد كلّ من السمة ref وقيمة مطالبة صريحة، تكون القيمة الصريحة هي القيمة التلقائية، ويتم استخدامها إذا لم يتم حلّ متغيّر التدفق المشار إليه.
- type - (اختياري) إحدى القيم التالية: string (القيمة التلقائية) أو number أو boolean أو map
- array: (اختياري) اضبط القيمة على true للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. القيمة التلقائية: false.
<CustomClaims>
ملاحظة: يتم حاليًا إدراج عنصر CustomClaims عند إضافة سياسة GenerateJWT جديدة من خلال واجهة المستخدم. هذا العنصر غير فعّال ويتم تجاهله. العنصر الصحيح الذي يجب استخدامه بدلاً من ذلك هو <AdditionalClaims>. سيتم تعديل واجهة المستخدم لإدراج العناصر الصحيحة في وقت لاحق.
<Id>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
تتحقّق هذه السمة من أنّ JWT يتضمّن مطالبة jti المحدّدة. عندما تكون قيمة النص وسمة ref فارغتين، ستنشئ السياسة معرّف jti يحتوي على معرّف فريد عالمي عشوائي. مطالبة معرّف JWT (jti) هي معرّف فريد لرمز JWT. لمزيد من المعلومات حول jti، يُرجى الرجوع إلى RFC7519.
| تلقائي | لا ينطبق |
| التواجد | اختياري |
| النوع | سلسلة أو مرجع |
| القيم الصالحة | إما سلسلة أو اسم متغيّر في التدفق يحتوي على رقم التعريف |
<IgnoreCriticalHeaders>
<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>
اضبط القيمة على "خطأ" إذا كنت تريد أن تطرح السياسة خطأً عندما لا يكون أي رأس مُدرَج في الرأس crit الخاص برمز JWT مُدرَجًا في العنصر <KnownHeaders>.
اضبط القيمة على "صحيح" لكي تتجاهل سياسة VerifyJWT العنوان crit.
أحد أسباب ضبط هذه السمة على "صحيح" هو إذا كنت في بيئة اختبار ولم تكن جاهزًا بعد للتسبّب في حدوث خطأ عند عدم توفّر عنوان.
| تلقائي | خطأ |
| التواجد | اختياري |
| النوع | منطقي |
| القيم الصالحة | صحيح أو خطأ |
<IgnoreIssuedAt>
<IgnoreIssuedAt>true|false</IgnoreIssuedAt>
اضبط القيمة على "خطأ" (القيمة التلقائية) إذا كنت تريد أن تطرح السياسة خطأً عندما يحتوي رمز JWT على مطالبة iat (وقت الإصدار) تحدّد وقتًا في المستقبل.
اضبط القيمة على "صحيح" لكي تتجاهل السياسة iat أثناء عملية التحقّق.
| تلقائي | خطأ |
| التواجد | اختياري |
| النوع | منطقي |
| القيم الصالحة | صحيح أو خطأ |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
اضبط القيمة على "خطأ" إذا كنت تريد أن تعرض السياسة خطأً عند تعذُّر تحديد أي متغير مرجعي محدّد في السياسة. اضبط القيمة على "صحيح" للتعامل مع أي متغيّر لا يمكن حله كسلسلة فارغة (قيمة فارغة).
| تلقائي | خطأ |
| التواجد | اختياري |
| النوع | منطقي |
| القيم الصالحة | صحيح أو خطأ |
<Issuer>
<Issuer ref='variable-name-here'/> <Issuer>issuer-string-here</Issuer>
تتحقّق السياسة من أنّ جهة الإصدار في رمز JWT المميز تتطابق مع السلسلة المحدّدة في عنصر الإعدادات. مطالبة تحدّد جهة إصدار رمز JWT. هذه إحدى مجموعات المطالبات المسجّلة المذكورة في RFC7519.
| تلقائي | لا ينطبق |
| التواجد | اختياري |
| النوع | سلسلة أو مرجع |
| القيم الصالحة | أي |
<KnownHeaders>
<KnownHeaders>a,b,c</KnownHeaders> or: <KnownHeaders ref=’variable_containing_headers’/>
تستخدِم سياسة GenerateJWT العنصر <CriticalHeaders> لتعبئة العنوان crit في رمز JWT. على سبيل المثال:
{
“typ: “...”,
“alg” : “...”,
“crit” : [ “a”, “b”, “c” ],
}تفحص سياسة VerifyJWT العنوان crit في رمز JWT المميّز، إذا كان متوفّرًا، وتتحقّق من أنّ العنصر <KnownHeaders> يدرج هذا العنوان أيضًا لكل عنوان مُدرَج. يمكن أن يحتوي العنصر <KnownHeaders> على مجموعة فرعية من العناصر المدرَجة في crit.
يجب فقط أن يتم إدراج جميع العناوين المُدرَجة في crit ضمن العنصر <KnownHeaders>. أي عنوان تعثر عليه السياسة في crit
ولم يتم إدراجه أيضًا في <KnownHeaders> يؤدي إلى تعذُّر تنفيذ سياسة VerifyJWT.
يمكنك اختياريًا ضبط سياسة VerifyJWT لتجاهل العنوان crit من خلال ضبط العنصر <IgnoreCriticalHeaders> على true.
| تلقائي | لا ينطبق |
| التواجد | اختياري |
| النوع | مصفوفة سلاسل مفصولة بفواصل |
| القيم الصالحة | إما مصفوفة أو اسم متغيّر يحتوي على المصفوفة |
<PublicKey/Certificate>
<PublicKey> <Certificate ref="signed_public.cert"/> </PublicKey> -or- <PublicKey> <Certificate> -----BEGIN CERTIFICATE----- cert data -----END CERTIFICATE----- </Certificate> </PublicKey>
تحدّد هذه السمة الشهادة الموقَّعة المستخدَمة للتحقّق من التوقيع على رمز JWT. استخدِم السمة ref لتمرير الشهادة الموقَّعة في متغيّر سير العمل، أو حدِّد الشهادة بترميز PEM مباشرةً. يجب استخدامها فقط عندما تكون الخوارزمية إحدى الخوارزميات التالية: RS256 أو RS384 أو RS512 أو PS256 أو PS384 أو PS512 أو ES256 أو ES384 أو ES512.
| تلقائي | لا ينطبق |
| التواجد | للتحقّق من صحة رمز JWT موقّع باستخدام خوارزمية RSA، يجب استخدام عناصر الشهادة أو JWKS أو القيمة. |
| النوع | سلسلة |
| القيم الصالحة | متغيّر أو سلسلة في التدفق |
<PublicKey/JWKS>
<!-- Specify the JWKS. --> <PublicKey> <JWKS>jwks-value-here</JWKS> </PublicKey> or: <!-- Specify a variable containing the JWKS. --> <PublicKey> <JWKS ref="public.jwks"/> </PublicKey> or: <!-- Specify a public URL that returns the JWKS. The URL is static, meaning you cannot set it using a variable. --> <PublicKey> <JWKS uri="jwks-url"/> </PublicKey>
تحدّد هذه السمة قيمة بتنسيق JWKS (RFC 7517) تحتوي على مجموعة من المفاتيح العامة. يجب استخدامها فقط عندما تكون الخوارزمية إحدى الخوارزميات التالية: RS256 أو RS384 أو RS512 أو PS256 أو PS384 أو PS512 أو ES256 أو ES384 أو ES512.
إذا كان رمز JWT الوارد يتضمّن معرّف مفتاح متوفّر في مجموعة JWKS، ستستخدم السياسة المفتاح العام الصحيح للتحقّق من توقيع JWT. للحصول على تفاصيل حول هذه الميزة، اطّلِع على استخدام مجموعة مفاتيح الويب JSON (JWKS) للتحقّق من رمز JWT.
إذا كنت تسترد القيمة من عنوان URL متاح للجميع، يخزّن Edge مفتاح JWKS مؤقتًا لمدة 300 ثانية. عند انتهاء صلاحية ذاكرة التخزين المؤقت، يستردّ Edge مجموعة JWKS مرة أخرى.
| تلقائي | لا ينطبق |
| التواجد | للتحقّق من صحة رمز JWT باستخدام خوارزمية RSA، يجب استخدام عنصر الشهادة أو JWKS أو القيمة. |
| النوع | سلسلة |
| القيم الصالحة | متغيّر تدفّق أو قيمة سلسلة أو عنوان URL |
<PublicKey/Value>
<PublicKey> <Value ref="public.publickeyorcert"/> </PublicKey> -or- <PublicKey> <Value> -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw2kPrRzcufvUNHvTH/WW Q0UrCw5c0+Y707KX3PpXkZGbtTT4nvU1jC0d1lHV8MfUyRXmpmnNxJHAC2F73IyN C5TBtXMORc+us7A2cTtC4gZV256bT4h3sIEMsDl0Joz9K9MPzVPFxa1i0RgNt06n Xn/Bs2UbbLlKP5Q1HPxewUDEh0gVMqz9wdIGwH1pPxKvd3NltYGfPsUQovlof3l2 ALvO7i5Yrm96kknfFEWf1EjmCCKvz2vjVbBb6mp1ZpYfc9MOTZVpQcXSbzb/BWUo ZmkDb/DRW5onclGzxQITBFP3S6JXd4LNESJcTp705ec1cQ9Wp2Kl+nKrKyv1E5Xx DQIDAQAB -----END PUBLIC KEY----- </Value> </PublicKey>
تحدّد هذه السمة المفتاح العام أو شهادة المفتاح العام المستخدَمة للتحقّق من التوقيع على رمز JWT. استخدِم السمة ref لتمرير المفتاح/الشهادة في متغيّر سير العمل، أو حدِّد المفتاح المرمَّز بتنسيق PEM مباشرةً. يجب استخدامها فقط عندما تكون الخوارزمية إحدى الخوارزميات التالية: RS256 أو RS384 أو RS512 أو PS256 أو PS384 أو PS512 أو ES256 أو ES384 أو ES512.
| تلقائي | لا ينطبق |
| التواجد | للتحقّق من صحة رمز JWT موقّع باستخدام خوارزمية RSA، يجب استخدام عناصر الشهادة أو JWKS أو القيمة. |
| النوع | سلسلة |
| القيم الصالحة | متغيّر أو سلسلة في التدفق |
<SecretKey/Value>
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.your-variable-name"/> </SecretKey>
توفّر هذه السمة المفتاح السري المستخدَم للتحقّق من الرموز المميزة أو توقيعها باستخدام خوارزمية HMAC. استخدِم فقط عندما تكون الخوارزمية إحدى الخوارزميات HS256 أو HS384 أو HS512.
| تلقائي | لا ينطبق |
| التواجد | مطلوبة لخوارزميات HMAC. |
| النوع | سلسلة |
| القيم الصالحة |
بالنسبة إلى استخدِم السمة ref لتمرير المفتاح في متغيّر التدفق. ملاحظة: إذا كان متغيّرًا في سير العمل، يجب أن يتضمّن البادئة "private". على سبيل المثال:
|
<Source>
<Source>jwt-variable</Source>
في حال توفّره، يحدّد هذا العنصر متغيّر التدفق الذي تتوقّع السياسة العثور فيه على رمز JWT للتحقّق منه.
| تلقائي | request.header.authorization (يُرجى الاطّلاع على الملاحظة أعلاه للحصول على معلومات مهمة
حول الإعداد التلقائي). |
| التواجد | اختياري |
| النوع | سلسلة |
| القيم الصالحة | اسم متغيّر في مسار Edge |
<Subject>
<Subject>subject-string-here</Subject>
تتحقّق السياسة من أنّ الموضوع في رمز JWT المميز يتطابق مع السلسلة المحدّدة في إعدادات السياسة. تحدّد هذه المطالبة موضوع رمز JWT أو تقدّم بيانًا عنه. هذا هو أحد مجموعات المطالبات المعيارية المذكورة في RFC7519.
| تلقائي | لا ينطبق |
| التواجد | اختياري |
| النوع | سلسلة |
| القيم الصالحة | أي قيمة تحدّد موضوعًا بشكلٍ فريد |
<TimeAllowance>
<TimeAllowance>120s</TimeAllowance>
"فترة السماح" للأوقات على سبيل المثال، إذا تم ضبط فترة السماح الزمنية على 60 ثانية، سيتم التعامل مع رمز JWT منتهي الصلاحية على أنّه لا يزال صالحًا لمدة 60 ثانية بعد تاريخ انتهاء الصلاحية المحدّد. سيتم تقييم not-before-time بشكل مشابه. يتم ضبط القيمة تلقائيًا على 0 ثانية (بدون فترة سماح).
| تلقائي | 0 ثانية (ما مِن فترة سماح) |
| التواجد | اختياري |
| النوع | سلسلة |
| القيم الصالحة |
قيمة أو مرجع إلى متغيّر تدفق يحتوي على القيمة يمكن تحديد الفترات الزمنية على النحو التالي:
|
متغيّرات التدفق
عند النجاح، تم ضبط السياستَين التحقّق من 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، وهكذا. يُرجى الاطّلاع على مَعلمة العنوان(الخوارزمية) لمزيد من المعلومات. |
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 |
في حالة التحقق منJWT، سيكون هذا المتغير صحيحًا عند التحقق من التوقيع،
الوقت الحالي قبل انتهاء صلاحية الرمز المميز، وبعد قيمة notBefore، إذا كانت
موجودة. وبخلاف ذلك، يتم عرض "خطأ".
في حالة DecodeJWT، لا يتم ضبط هذا المتغيّر. |
مرجع الخطأ
يصف هذا القسم رموز الأخطاء ورسائل الخطأ التي يتم عرضها ومتغيرات الأخطاء التي تضبطها Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. هذه المعلومات مهمة لمعرفة ما إذا كنت تعمل على تطوير قواعد للأخطاء للتعامل معها. لمزيد من المعلومات، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن الأخطاء المتعلقة بالسياسات وأخطاء المعالجة.
أخطاء في وقت التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.
| رمز الخطأ | رموز حالة HTTP | يحدث عند |
|---|---|---|
steps.jwt.AlgorithmInTokenNotPresentInConfiguration |
401 | يحدث ذلك عندما تتضمّن سياسة إثبات الهوية خوارزميات متعدّدة. |
steps.jwt.AlgorithmMismatch |
401 | الخوارزمية المحدّدة في سياسة الإنشاء لا تتطابق مع الخوارزمية المتوقعة في سياسة إثبات الملكية. يجب أن تتطابق الخوارزميات المحدّدة. |
steps.jwt.FailedToDecode |
401 | تعذَّر على السياسة فك ترميز JWT. من المحتمل أن يكون JWT تالفًا. |
steps.jwt.GenerationFailed |
401 | تعذَّر على السياسة إنشاء رمز JWT. |
steps.jwt.InsufficientKeyLength |
401 | بالنسبة إلى مفتاح أقل من 32 بايت لخوارزمية HS256، وأقل من 48 بايت لخوارزمية HS386، وأقل من 64 بايت لخوارزمية HS512. |
steps.jwt.InvalidClaim |
401 | بسبب عدم تطابق مطالبة أو مطالبة، أو عدم تطابق العنوان أو العنوان. |
steps.jwt.InvalidCurve |
401 | المنحنى المحدد بالمفتاح غير صالح لخوارزمية المنحنى البيضاوي. |
steps.jwt.InvalidJsonFormat |
401 | تم العثور على تنسيق JSON غير صالح في الرأس أو الحمولة. |
steps.jwt.InvalidToken |
401 | يحدث هذا الخطأ عند تعذُّر التحقُّق من توقيع JWT. |
steps.jwt.JwtAudienceMismatch |
401 | تعذّرت المطالبة بالجمهور عند إثبات صحة الرمز المميّز. |
steps.jwt.JwtIssuerMismatch |
401 | تعذّرت المطالبة من جهة الإصدار بإثبات ملكية الرمز المميّز. |
steps.jwt.JwtSubjectMismatch |
401 | تعذّرت المطالبة بالموضوع عند إثبات ملكية الرمز المميّز. |
steps.jwt.KeyIdMissing |
401 | تستخدم سياسة "التحقّق" رمز JWKS كمصدر للمفاتيح العامة، ولكنّ سياسة JWT الموقَّعة لا
تتضمّن السمة kid في العنوان. |
steps.jwt.KeyParsingFailed |
401 | تعذّر تحليل المفتاح العام من المعلومات الأساسية المحددة. |
steps.jwt.NoAlgorithmFoundInHeader |
401 | يحدث عندما لا يحتوي JWT على عنوان خوارزمية. |
steps.jwt.NoMatchingPublicKey |
401 | تستخدم سياسة "التحقّق" مفتاح JWKS كمصدر للمفاتيح العامة، ولكن لا يتم إدراج kid
في JWT الموقَّع في JWKS. |
steps.jwt.SigningFailed |
401 | في CREATEJWT لمفتاح أقل من الحد الأدنى للحجم لخوارزميات HS384 أو HS512 |
steps.jwt.TokenExpired |
401 | تحاول السياسة التحقّق من رمز مميّز منتهي الصلاحية. |
steps.jwt.TokenNotYetValid |
401 | الرمز المميز غير صالح بعد. |
steps.jwt.UnhandledCriticalHeader |
401 | إنّ العنوان الذي عثرت عليه سياسة "التحقق من JWT" ضمن عنوان crit غير
مدرَج في KnownHeaders. |
steps.jwt.UnknownException |
401 | حدث استثناء غير معروف. |
steps.jwt.WrongKeyType |
401 | تم تحديد نوع خاطئ للمفتاح. على سبيل المثال، إذا حدّدت مفتاح RSA لخوارزمية "منحنى بيضاوي" أو مفتاح منحنى لخوارزمية RSA. |
أخطاء النشر
يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.
| اسم الخطأ | السبب | إصلاح |
|---|---|---|
InvalidNameForAdditionalClaim |
ستتعذّر عملية النشر إذا كانت المطالبة المستخدَمة في العنصر الفرعي <Claim>
في العنصر <AdditionalClaims> هي أحد الأسماء المسجّلة التالية:
kid أو iss أو sub أو aud أو iat
أو exp أو nbf أو jti.
|
build |
InvalidTypeForAdditionalClaim |
إذا كانت المطالبة المستخدَمة في العنصر الفرعي <Claim> في العنصر <AdditionalClaims> ليست من النوع string أو number أو boolean أو map، سيتعذّر النشر.
|
build |
MissingNameForAdditionalClaim |
إذا لم يتم تحديد اسم المطالبة في العنصر الفرعي <Claim> في العنصر <AdditionalClaims>، سيتعذّر النشر.
|
build |
InvalidNameForAdditionalHeader |
يحدث هذا الخطأ إذا كان اسم المطالبة المستخدَم في العنصر الفرعي <Claim> في العنصر <AdditionalClaims> هو alg أو typ.
|
build |
InvalidTypeForAdditionalHeader |
إذا كان نوع المطالبة المستخدَم في العنصر الفرعي <Claim> في العنصر <AdditionalClaims> ليس من النوع string أو number أو boolean أو map، سيتعذّر النشر.
|
build |
InvalidValueOfArrayAttribute |
يحدث هذا الخطأ عندما لا يتم ضبط قيمة سمة الصفيف في العنصر الفرعي <Claim> للعنصر <AdditionalClaims> على true أو false.
|
build |
InvalidValueForElement |
وإذا لم تكن القيمة المحدّدة في العنصر <Algorithm> قيمة مسموح بها،
سيتعذّر إتمام عملية النشر.
|
build |
MissingConfigurationElement |
سيحدث هذا الخطأ إذا لم يتم استخدام العنصر <PrivateKey> مع خوارزميات مجموعة RSA أو إذا لم يتم استخدام العنصر <SecretKey> مع خوارزميات HS Family.
|
build |
InvalidKeyConfiguration |
إذا لم يتم تحديد العنصر الفرعي <Value> في العنصرَين <PrivateKey>
أو <SecretKey>، سيتعذّر النشر.
|
build |
EmptyElementForKeyConfiguration |
إذا كانت سمة المرجع للعنصر الفرعي <Value> للعناصر <PrivateKey>
أو <SecretKey> فارغة أو غير محدّدة، سيتعذّر إتمام عملية النشر.
|
build |
InvalidConfigurationForVerify |
يحدث هذا الخطأ عند تحديد العنصر <Id> داخل
العنصر <SecretKey>.
|
build |
InvalidEmptyElement |
يحدث هذا الخطأ إذا كان العنصر <Source> في سياسة "التحقق من JWT"
فارغًا. وفي حالة وجوده، يجب تحديده باستخدام اسم متغير تدفق Edge.
|
build |
InvalidPublicKeyValue |
إذا كانت القيمة المستخدَمة في العنصر الفرعي <JWKS> للعنصر <PublicKey> لا تستخدم تنسيقًا صالحًا على النحو المحدّد في RFC 7517، لن تنجح عملية النشر.
|
build |
InvalidConfigurationForActionAndAlgorithm |
إذا تم استخدام العنصر <PrivateKey> مع خوارزميات HS Family أو
العنصر <SecretKey> مع خوارزميات RSA Family،
سيتعذّر إجراء عملية النشر.
|
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>