سياسة CheckJWT

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

المزايا

التحقق من التوقيع على JWT المستلم من العملاء أو الأنظمة الأخرى. تنطبق هذه السياسة أيضًا على تستخرج الادعاءات في متغيرات سياقية بحيث يمكن للسياسات أو الشروط اللاحقة دراسة هذه القيم لاتخاذ قرارات بشأن التفويض أو التوجيه. يمكنك الاطّلاع على نظرة عامة على سياسات JWS وJWT للحصول على مقدمة تفصيلية.

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

إذا كان JWT مُثبتًا وصالحًا، يتم إذًا نشر جميع المطالبات المضمَّنة في JWT. ويتم استخراجها إلى متغيرات سياق لاستخدامها في سياسات أو شروط لاحقة، ويتم طلب السماح لها بالمتابعة. إذا تعذّر التحقّق من توقيع JWT أو كان JWT غير صالح بسبب لأحد الطوابع الزمنية، وتتوقّف جميع عمليات المعالجة، ويظهر خطأ في الردّ.

للتعرّف على أجزاء JWT وكيفية تشفيرها وتوقيعها، يمكنك الرجوع إلى RFC7519.

فيديو

يمكنك مشاهدة فيديو قصير لمعرفة كيفية إثبات صحة التوقيع في JWT.

عيّنات

التأكّد من أنّ 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 المزيد مثل الإزالة التلقائية للأحرف غير الأبجدية الرقمية.

يمكنك استخدام العنصر <displayname></displayname> بشكل اختياري من أجل تسمية السياسة في محرِّر الخادم الوكيل لواجهة مستخدم الإدارة بلغة طبيعية مختلفة الاسم.

لا ينطبق مطلوب
continueOnError اضبط القيمة على false لعرض رسالة خطأ عند تعذُّر تنفيذ سياسة. هذا متوقّع السلوك في معظم السياسات.

يمكنك ضبط القيمة على true لمواصلة تنفيذ المسار حتى بعد تطبيق إحدى السياسات. فشل.

خطأ اختياري
مفعّلة اضبط القيمة على true لفرض السياسة.

ضبط على false على "إيقاف" السياسة. لن يتم فرض السياسة حتى لو بقيت مرتبطة بتدفق.

صحيح اختياري
غير متزامن تم إيقاف هذه السمة نهائيًا. خطأ منهي العمل به

&lt;DisplayName&gt;

<DisplayName>Policy Display Name</DisplayName>

يمكن استخدامها بالإضافة إلى سمة الاسم لتصنيف السياسة في أداة تعديل الخادم الوكيل لواجهة مستخدم الإدارة باسم آخر بلغة طبيعية

تلقائي إذا لم تستخدم هذا العنصر، سيتم استخدام قيمة سمة اسم السياسة.
الحضور اختياري
النوع سلسلة

&lt;Algorithm&gt;

<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

&lt;Audience&gt;

<Audience>audience-here</Audience>

or:

<Audience ref='variable-name-here'/>

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

تلقائي لا ينطبق
الحضور اختياري
النوع سلسلة
القيم الصالحة يشير ذلك المصطلح إلى متغيّر تدفق أو سلسلة تحدِّد الجمهور.

&lt;AdditionalClaims/Claim&gt;

<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 }
  }
}

&lt;AdditionalHeaders/Claim&gt;

<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 - (اختيارية) أحد الخيارات التالية: سلسلة (تلقائي) أو رقم أو قيمة منطقية أو خريطة
  • مصفوفة - (اختيارية) يتم ضبطها على صحيح للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. الإعداد التلقائي: خطأ.

&lt;CustomClaims&gt;

ملاحظة: في الوقت الحالي، يتم إدراج عنصر CustomClaims عند إضافة عنصر سياسة GenerateJWT من خلال واجهة المستخدم. هذا العنصر غير فعّال ويتم تجاهله. الإجابات الصحيحة العنصر المطلوب استخدامه بدلاً من ذلك هو &lt;AdditionalClaims&gt;. واجهة المستخدم سيتم تحديثه لإدراج العناصر الصحيحة في وقت لاحق.

&lt;Id&gt;

<Id>explicit-jti-value-here</Id>
 -or-
<Id ref='variable-name-here'/>
 -or-
<Id/>

يتم التحقّق من أنّ JWT يتضمّن مطالبة jti المحدّدة. عندما تكون القيمة النصية والمرجع كلاهما فارغ، ستنشئ السياسة معرّف jti يحتوي على معرّف فريد عالمي (UUID) عشوائي. رقم تعريف JWT المطالبة (jti) هي معرّف فريد لـ JWT. لمزيد من المعلومات حول Jti، راجِع RFC7519.

تلقائي لا ينطبق
الحضور اختياري
النوع سلسلة أو مرجع
القيم الصالحة سلسلة أو اسم متغيّر تدفق يحتوي على رقم التعريف.

&lt;IgnoreCriticalHeaders&gt;

<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>

يمكنك الضبط على "خطأ" إذا كنت تريد أن تعرض السياسة خطأً عند ظهور أي عنوان مُدرَج في عنوان crit الخاص بـ JWT غير مُدرج في العنصر <KnownHeaders>. يمكنك الضبط على "صحيح" لجعل سياسة التحقّق من JWT تتجاهل العنوان crit.

أحد أسباب تعيين هذا العنصر على "صحيح" هو إذا كنت في بيئة اختبار ولم يتم اتخاذ وجاهزًا لإحداث إخفاق في عنوان مفقود.

تلقائي خطأ
الحضور اختياري
النوع منطقي
القيم الصالحة صواب أم خطأ

&lt;IgnoreIssuedAt&gt;

<IgnoreIssuedAt>true|false</IgnoreIssuedAt>

يمكنك الضبط على "خطأ" (تلقائي) إذا كنت تريد أن تعرض السياسة رسالة خطأ عندما يحتوي JWT على مطالبة iat (تم إصدارها في) تحدد وقتًا في المستقبل يمكنك ضبط السياسة على "صحيح" للتسبب في تجاهل السياسة لـ iat أثناء عملية إثبات الملكية.

تلقائي خطأ
الحضور اختياري
النوع منطقي
القيم الصالحة صواب أم خطأ

&lt;IgnoreUnresolvedVariables&gt;

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

يمكنك الضبط على "خطأ" إذا كنت تريد أن تعرض السياسة خطأً عند تحديد أي متغيّر مرجعي. في السياسة غير قابل للتحليل. الضبط على "صحيح" للتعامل مع أي متغيّر غير قابل للتحليل كسلسلة فارغة (فارغ).

تلقائي خطأ
الحضور اختياري
النوع منطقي
القيم الصالحة صواب أم خطأ

&lt;Issuer&gt;

<Issuer ref='variable-name-here'/>
<Issuer>issuer-string-here</Issuer>

تتحقّق السياسة من أنّ جهة الإصدار في JWT تطابق السلسلة المحدّدة في العنصر. مطالبة تحدّد هوية جهة إصدار JWT هذا هو أحد مجموعة مسجّلة من المطالبات المذكورة في RFC7519.

تلقائي لا ينطبق
الحضور اختياري
النوع سلسلة أو مرجع
القيم الصالحة أي لون

&lt;KnownHeaders&gt;

<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.

تلقائي لا ينطبق
الحضور اختياري
النوع مصفوفة السلاسل المفصولة بفواصل
القيم الصالحة إمّا مصفوفة أو اسم متغير يحتوي على المصفوفة.

&lt;PublicKey/Certificate&gt;

<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، أو عناصر القيمة
النوع سلسلة
القيم الصالحة سلسلة أو متغيّر التدفق

&lt;PublicKey/JWKS&gt;

<!-- 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

&lt;PublicKey/Value&gt;

<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، أو عناصر القيمة
النوع سلسلة
القيم الصالحة سلسلة أو متغيّر التدفق

&lt;SecretKey/Value&gt;

<SecretKey encoding="base16|hex|base64|base64url">
  <Value ref="private.your-variable-name"/>
</SecretKey>

يوفر المفتاح السري المستخدم للتحقق من الرموز المميزة أو توقيعها باستخدام خوارزمية HMAC. الاستخدام فقط إذا كانت الخوارزمية بأي من القيم التالية: HS256 أو HS384 أو HS512.

تلقائي لا ينطبق
الحضور مطلوب لخوارزميات HMAC.
النوع سلسلة
القيم الصالحة

بالنسبة إلى encoding، القيم الصالحة هي hex وbase16 وbase64 أو base64url. قيمتا الترميز hex وbase16 مرادفتان.

استخدام السمة ref لتمرير المفتاح في متغير التدفق.

ملاحظة: في حال كان متغيّر التدفق، يجب أن يتضمّن البادئة "خاص". على سبيل المثال: private.mysecret

&lt;Source&gt;

<Source>jwt-variable</Source>

في حال توفّره، تحدّد هذه السياسة متغيّر التدفق الذي تتوقع السياسة فيه العثور على JWT تحقق.

تلقائي request.header.authorization (راجِع الملاحظة أعلاه للاطّلاع على معلومات مهمة) عن الإعداد الافتراضي).
الحضور اختياري
النوع سلسلة
القيم الصالحة اسم متغير تدفق Edge.

&lt;Subject&gt;

<Subject>subject-string-here</Subject>

تتحقّق السياسة من أنّ الموضوع في JWT يتطابق مع السلسلة المحدَّدة في السياسة. التكوين. يحدد هذا الادّعاء أو يصدر بيانًا حول موضوع JWT. هذا هو إحدى المجموعات العادية من المطالبات المذكورة في RFC7519.

تلقائي لا ينطبق
الحضور اختياري
النوع سلسلة
القيم الصالحة يشير ذلك المصطلح إلى أي قيمة تحدِّد موضوعًا معيّنًا بشكل فريد.

&lt;TimeAllowance&gt;

<TimeAllowance>120s</TimeAllowance>

"فترة السماح" في بعض الأحيان. على سبيل المثال، إذا تم ضبط الحدّ الزمني على 60 ثانية، يتم التعامل مع ملف JWT منتهية الصلاحية على أنه لا يزال صالحًا لمدة 60 ثانية بعد تأكيد انتهاء الصلاحية. تشير رسالة الأشكال البيانية سيتم تقييمه بشكل مماثل. الإعداد التلقائي هو 0 ثانية (بدون فترة سماح).

تلقائي 0 ثانية (ما مِن فترة سماح)
الحضور اختياري
النوع سلسلة
القيم الصالحة قيمة أو مرجع إلى متغيّر تدفق يحتوي على القيمة. يمكن أن تكون الفترات الزمنية المحددة على النحو التالي:
  • s = ثانية
  • m = دقائق
  • h = ساعات
  • d = أيام

متغيّرات التدفق

عند النجاح، تم ضبط السياستَين التحقّق من 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.
InvalidTypeForAdditionalClaim إذا كانت المطالبة المستخدَمة في العنصر الفرعي <Claim> في العنصر <AdditionalClaims> ليست من النوع string أو number أو boolean أو map، سيتعذّر النشر.
MissingNameForAdditionalClaim إذا لم يتم تحديد اسم المطالبة في العنصر الفرعي <Claim> في العنصر <AdditionalClaims>، سيتعذّر النشر.
InvalidNameForAdditionalHeader يحدث هذا الخطأ إذا كان اسم المطالبة المستخدَم في العنصر الفرعي <Claim> في العنصر <AdditionalClaims> هو alg أو typ.
InvalidTypeForAdditionalHeader إذا كان نوع المطالبة المستخدَم في العنصر الفرعي <Claim> في العنصر <AdditionalClaims> ليس من النوع string أو number أو boolean أو map، سيتعذّر النشر.
InvalidValueOfArrayAttribute يحدث هذا الخطأ عندما لا يتم ضبط قيمة سمة الصفيف في العنصر الفرعي <Claim> للعنصر <AdditionalClaims> على true أو false.
InvalidValueForElement وإذا لم تكن القيمة المحدّدة في العنصر <Algorithm> قيمة مسموح بها، سيتعذّر إتمام عملية النشر.
MissingConfigurationElement سيحدث هذا الخطأ إذا لم يتم استخدام العنصر <PrivateKey> مع خوارزميات مجموعة RSA أو إذا لم يتم استخدام العنصر <SecretKey> مع خوارزميات HS Family.
InvalidKeyConfiguration إذا لم يتم تحديد العنصر الفرعي <Value> في العنصرَين <PrivateKey> أو <SecretKey>، سيتعذّر النشر.
EmptyElementForKeyConfiguration إذا كانت سمة المرجع للعنصر الفرعي <Value> للعناصر <PrivateKey> أو <SecretKey> فارغة أو غير محدّدة، سيتعذّر إتمام عملية النشر.
InvalidConfigurationForVerify يحدث هذا الخطأ عند تحديد العنصر <Id> داخل العنصر <SecretKey>.
InvalidEmptyElement يحدث هذا الخطأ إذا كان العنصر <Source> في سياسة "التحقق من JWT" فارغًا. وفي حالة وجوده، يجب تحديده باستخدام اسم متغير تدفق Edge.
InvalidPublicKeyValue إذا كانت القيمة المستخدَمة في العنصر الفرعي <JWKS> للعنصر <PublicKey> لا تستخدم تنسيقًا صالحًا على النحو المحدّد في RFC 7517، لن تنجح عملية النشر.
InvalidConfigurationForActionAndAlgorithm إذا تم استخدام العنصر <PrivateKey> مع خوارزميات HS Family أو العنصر <SecretKey> مع خوارزميات RSA Family، سيتعذّر إجراء عملية النشر.

متغيّرات الأخطاء

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

المتغيرات المكان مثال
fault.name="fault_name" fault_name هو اسم الخطأ، كما هو موضَّح في جدول أخطاء وقت التشغيل أعلاه. اسم الخطأ هو الجزء الأخير من رمز الخطأ. fault.name Matches "TokenExpired"
JWT.failed تضبط جميع سياسات JWT المتغيّر نفسه في حال حدوث عطل. JWT.failed = true

مثال على استجابة الخطأ

رموز الأخطاء في سياسة JWT

لمعالجة الخطأ، أفضل ممارسة هي رصد الجزء 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>