سياسة CheckJWT

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

الموضوع

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

عند تنفيذ هذه السياسة، يتحقّق Edge من توقيع 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. شاهِد الفيديو أعلاه للحصول على مثال كامل، بما في ذلك كيفية تقديم طلب للسياسة.

يمكنك الاطّلاع على مرجع العنصر للحصول على تفاصيل حول المتطلبات والخيارات لكل عنصر في نموذج السياسة هذا.

<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 لا تتطابق مع القيمة المطلوبة لعنصر "الموضوع" كما هو محدّد في إعدادات السياسة.

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

تعيين العناصر الرئيسية

تعتمد العناصر التي تستخدمها لتحديد المفتاح المستخدَم للتحقّق من 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 لمواصلة تنفيذ التدفق حتى بعد تعذُّر تنفيذ السياسة.

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

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

صحيح اختياري
async تم إيقاف هذه السمة نهائيًا. false منهي العمل به

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

<CustomClaims>

ملاحظة: يتم حاليًا إدراج عنصر CustomClaims عند إضافة سياسة GenerateJWT جديدة من خلال واجهة المستخدم. هذا العنصر لا يعمل وتم تجاهله. العنصر الصحيح الذي يمكنك استخدامه بدلاً من ذلك هو <AdditionalClaims>. وسيتم تحديث واجهة المستخدم لإدراج العناصر الصحيحة لاحقًا.

<الرقم التعريفي>

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

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

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

<IgnoreCriticalHeaders>

<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>

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

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

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

<IgnoreIssuedAt>

<IgnoreIssuedAt>true|false</IgnoreIssuedAt>

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

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

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

يمكنك ضبط السياسة على "خطأ" إذا كنت تريد أن تعرض السياسة خطأ عندما يكون أي متغيّر مُشار إليه محدّد في السياسة غير قابل للتحليل. يتم ضبطها على "true" للتعامل مع أي متغيّر غير قابل للتحليل كسلسلة فارغة (فارغ).

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

<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” ],
}

تفحص سياسة التحقّق من JWT رأس التعقيب في JWT إذا كان متوفّرًا، وتتحقّق من أنّ العنصر <KnownHeaders> يدرج هذا العنوان أيضًا في كل عنوان مُدرَج. ويمكن أن يحتوي العنصر <KnownHeaders> على مجموعة شاملة من العناصر المدرَجة في crit. من الضروري فقط أن يتم إدراج جميع العناوين المدرَجة في crit في العنصر <KnownHeaders>. إذا عثرت السياسة على عنوان في crit ولم يتم إدراجه أيضًا في <KnownHeaders>، لن تتمكّن من تنفيذ سياسة التحقّق من صحة المعلومات (M سبق).

يمكنك اختياريًا ضبط سياسة CheckJWT لتجاهل عنوان crit من خلال ضبط العنصر <IgnoreCriticalHeaders> على true.

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

<المفتاح العام/الشهادة>

<PublicKey>
   <Certificate ref="signed_public.cert"/>
</PublicKey>
-or-
<PublicKey>
    <Certificate>
    -----BEGIN CERTIFICATE-----
    cert data
    -----END CERTIFICATE-----
    </Certificate>
</PublicKey>

تحدد هذه العلامة الشهادة المُوقَّعة المُستخدمة للتحقق من التوقيع على JWT. استخدِم سمة المرجع لتمرير الشهادة المُوقَّعة في متغيّر تدفق، أو حدِّد الشهادة بترميز 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. استخدِم سمة المرجع لتمرير المفتاح/الشهادة في متغيّر التدفق، أو حدِّد المفتاح بترميز 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.
النوع سلسلة
القيم الصالحة

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

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

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

<المصدر>

<Source>jwt-variable</Source>

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

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

<Subject>

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

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

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

<TimeAllowance>

<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 وما إلى ذلك. راجِع مَعلمة العنوان(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.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>