أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المزايا
التحقق من التوقيع على 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
.
يمكنك مشاهدة الفيديو أعلاه للاطّلاع على مثال كامل، بما في ذلك كيفية تقديم طلب بشأن السياسة.
يمكنك الاطّلاع على مرجع Element للحصول على تفاصيل حول المتطلّبات والخيارات المتعلّقة بكل عنصر في هذا المرجع. نموذج السياسة.
<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." }
... يُعتبَر غير صالح، حتى إذا أمكن إثبات صحة التوقيع، لأن "فرعي" لا تتطابق المطالبة المُضمَّنة في JWT مع القيمة المطلوبة لـ "الموضوع" العنصر باعتباره المحددة في إعداد السياسة.
تكتب السياسة مخرجاتها على متغيرات السياق بحيث يمكن للسياسات أو الشروط اللاحقة في الخادم الوكيل لواجهة برمجة التطبيقات يمكنها فحص تلك القيم. اطّلِع على متغيّرات التدفق للحصول على قائمة بالمتغيّرات التي حدّدتها هذه السياسة.
تحديد العناصر الرئيسية
تعتمد العناصر التي تستخدمها لتحديد المفتاح المستخدم للتحقق من 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> |
|
*لمزيد من المعلومات حول المتطلبات الرئيسية، يُرجى الاطّلاع على لمحة عن خوارزميات تشفير التوقيع |
مرجع العنصر
يصف مرجع السياسة عناصر سياسة التحقّق من 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 للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. الإعداد التلقائي: خطأ |
القيم الصالحة | تمثّل هذه السمة أي قيمة تريد استخدامها في مطالبة إضافية. |
يأخذ العنصر <Claim>
السمات التالية:
- name - (مطلوبة) اسم المطالبة.
- ref - (اختيارية) اسم متغير التدفق. وفي حال توفّرها، ستستخدم السياسة القيمة التالية: المتغير مثل المطالبة. في حال تحديد كل من السمة ref وقيمة المطالبة الصريحة، سيتم وتكون القيمة الصريحة هي القيمة الافتراضية، ويتم استخدامها إذا لم يتم حل متغير التدفق المشار إليه.
- type - (اختيارية) أحد الخيارات التالية: سلسلة (تلقائي) أو رقم أو قيمة منطقية أو خريطة
- مصفوفة - (اختيارية) يتم ضبطها على صحيح للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. الإعداد التلقائي: خطأ.
عند تضمين العنصر <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 للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. الإعداد التلقائي: خطأ |
القيم الصالحة | تمثّل هذه السمة أي قيمة تريد استخدامها في مطالبة إضافية. |
يأخذ العنصر <Claim>
السمات التالية:
- name - (مطلوبة) اسم المطالبة.
- ref - (اختيارية) اسم متغير التدفق. وفي حال توفّرها، ستستخدم السياسة القيمة التالية: المتغير مثل المطالبة. في حال تحديد كل من السمة ref وقيمة المطالبة الصريحة، سيتم وتكون القيمة الصريحة هي القيمة الافتراضية، ويتم استخدامها إذا لم يتم حل متغير التدفق المشار إليه.
- type - (اختيارية) أحد الخيارات التالية: سلسلة (تلقائي) أو رقم أو قيمة منطقية أو خريطة
- مصفوفة - (اختيارية) يتم ضبطها على صحيح للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. الإعداد التلقائي: خطأ.
<CustomClaims>
ملاحظة: في الوقت الحالي، يتم إدراج عنصر CustomClaims عند إضافة عنصر سياسة GenerateJWT من خلال واجهة المستخدم. هذا العنصر غير فعّال ويتم تجاهله. الإجابات الصحيحة العنصر المطلوب استخدامه بدلاً من ذلك هو <AdditionalClaims>. واجهة المستخدم سيتم تحديثه لإدراج العناصر الصحيحة في وقت لاحق.
<Id>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
يتم التحقّق من أنّ JWT يتضمّن مطالبة jti المحدّدة. عندما تكون القيمة النصية والمرجع كلاهما فارغ، ستنشئ السياسة معرّف jti يحتوي على معرّف فريد عالمي (UUID) عشوائي. رقم تعريف JWT المطالبة (jti) هي معرّف فريد لـ JWT. لمزيد من المعلومات حول Jti، راجِع RFC7519.
تلقائي | لا ينطبق |
الحضور | اختياري |
النوع | سلسلة أو مرجع |
القيم الصالحة | سلسلة أو اسم متغيّر تدفق يحتوي على رقم التعريف. |
<IgnoreCriticalHeaders>
<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>
يمكنك الضبط على "خطأ" إذا كنت تريد أن تعرض السياسة خطأً عند ظهور أي عنوان مُدرَج في
عنوان crit الخاص بـ JWT غير مُدرج في العنصر <KnownHeaders>
.
يمكنك الضبط على "صحيح" لجعل سياسة التحقّق من JWT تتجاهل العنوان 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” ], }
تفحص سياسة CheckJWT عنوان crit في JWT، إن كان متوفرًا، ولكل عنوان مُدرَج
تتحقق من أن العنصر <KnownHeaders>
يسرد هذا العنوان أيضًا. تشير رسالة الأشكال البيانية
يمكن أن يحتوي العنصر <KnownHeaders>
على علامة شاملة من العناصر المدرجة في crit.
من الضروري فقط أن يتم سرد جميع العناوين المدرجة في crit في
العنصر <KnownHeaders>
أي عنوان تعثر عليه السياسة في crit
والتي لم يتم إدراجها أيضًا في <KnownHeaders>
، إلى تعذُّر استخدام سياسة VerifyJWT.
يمكنك اختياريًا ضبط سياسة CheckJWT لتجاهل عنوان 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 Web Key Set (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 لتمرير المفتاح في متغير التدفق. ملاحظة: في حال كان متغيّر التدفق، يجب أن يتضمّن البادئة "خاص". على سبيل المثال:
|
<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 ثانية بعد تأكيد انتهاء الصلاحية. تشير رسالة الأشكال البيانية سيتم تقييمه بشكل مماثل. الإعداد التلقائي هو 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>