إنشاء سياسة JWT

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

المزايا

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

فيديو

يمكنك مشاهدة فيديو قصير لمعرفة كيفية إنشاء رمز JWT موقَّع.

نماذج

إنشاء JWT موقَّع باستخدام HS256 الخوارزمية

تنشئ هذه السياسة نموذج JWT جديدًا ويوقّعها باستخدام خوارزمية HS256. يعتمد HS256 على سر مشترك لكلٍ من التوقيع والتحقق من التوقيع.

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

ستؤدي إعدادات السياسة هنا إلى إنشاء JWT بمجموعة من المطالبات العادية على النحو المحدّد في مواصفات JWT، بما في ذلك انتهاء الصلاحية لمدة ساعة، بالإضافة إلى مطالبة إضافية. يمكنك تضمين العدد الذي تريده من المطالبات الإضافية. اطلع على مرجع Element للحصول على تفاصيل حول المتطلبات والخيارات لكل عنصر في نموذج السياسة هذا.

<GenerateJWT name="JWT-Generate-HS256">
    <DisplayName>JWT Generate HS256</DisplayName>
    <Algorithm>HS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
    <OutputVariable>jwt-variable</OutputVariable>
</GenerateJWT>

سيحتوي ملف JWT الناتج على هذا العنوان...

{
  "typ" : "JWT", 
  "alg" : "HS256",
  "kid" : "1918290"
}

... وسيحتوي على حمولة تحتوي على محتويات على النحو التالي:

{ 
  "sub" : "monty-pythons-flying-circus",
  "iss" : "urn://apigee-edge-JWT-policy-test",
  "aud" : "show",
  "iat" : 1506553019,
  "exp" : 1506556619,
  "jti" : "BD1FF263-3D25-4593-A685-5EC1326E1F37",
  "show": "And now for something completely different."
}

قيمة المطالبات iat وexp وjti مختلفة.

إنشاء JWT موقَّع باستخدام RS256 الخوارزمية

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

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

<GenerateJWT name="JWT-Generate-RS256">
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PrivateKey>
        <Value ref="private.privatekey"/>
        <Password ref="private.privatekey-password"/>
        <Id ref="private.privatekey-id"/>
    </PrivateKey>
    <Subject>apigee-seattle-hatrack-montage</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience>
    <ExpiresIn>60m</ExpiresIn>
    <Id/>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
    <OutputVariable>jwt-variable</OutputVariable>
</GenerateJWT>

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

تعتمد العناصر التي تستخدمها لتحديد المفتاح المستخدم لإنشاء JWT على الخوارزمية المختارة، كما هو موضح في الجدول التالي:

خوارزمية العناصر الرئيسية
HS{256/384/512}*
<SecretKey>
  <Value ref="private.secretkey"/>
  <Id>1918290</Id>
</SecretKey>
RS/PS/ES{256/384/512}*
<PrivateKey>
  <Value ref="private.privatekey"/>
  <Password ref="private.privatekey-password"/>
  <Id ref="private.privatekey-id"/>
</PrivateKey>

العنصران <Password> و<Id> اختياريان.

*لمزيد من المعلومات حول المتطلبات الرئيسية، يُرجى الاطّلاع على لمحة عن خوارزميات تشفير التوقيع

مرجع عنصر لإنشاء JWT

يصف مرجع السياسة عناصر سياسة إنشاء JWT وسماتها.

ملاحظة: ستختلف التهيئة إلى حد ما استنادًا إلى التشفير والخوارزمية التي تستخدمها. يُرجى الرجوع إلى عيّنات للاطّلاع على أمثلة الإعدادات لحالات استخدام معينة.

السمات التي تطبيقها على عنصر المستوى الأعلى

<GenerateJWT 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>algorithm-here</Algorithm>

تُحدِّد خوارزمية التشفير لتوقيع الرمز المميّز.

تلقائي لا ينطبق
الحضور مطلوب
النوع سلسلة
القيم الصالحة HS256 وHS384 وHS512 وRS256 وRS384 وRS512 وES256 وES384 وES512 وPS256 وPS384 وPS512

&lt;Audience&gt;

<Audience>audience-here</Audience>

or:

<Audience ref='variable_containing_audience'/>

تنشئ السياسة JWT يحتوي على مطالبة aud تم ضبطها على القيمة المحدّدة تحدد هذه المطالبة المستلمين الذين تم تخصيص 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. يمكنك تحديد المطالبة بشكل صريح كسلسلة أو رقم أو قيمة منطقية أو خريطة أو مصفوفة. الخريطة هي ببساطة مجموعة من الاسم/القيمة أزواج.

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

يأخذ العنصر <Claim> السمات التالية:

  • name - (مطلوبة) اسم المطالبة.
  • ref - (اختيارية) اسم متغيّر التدفق. وفي حال توفّرها، ستستخدم السياسة القيمة التالية: المتغير مثل المطالبة. في حال تحديد كل من السمة ref وقيمة المطالبة الصريحة، سيتم وتكون القيمة الصريحة هي القيمة الافتراضية، ويتم استخدامها إذا لم يتم حل متغير التدفق المشار إليه.
  • type - (اختيارية) أحد الخيارات التالية: سلسلة (تلقائي) أو رقم أو قيمة منطقية أو خريطة
  • مصفوفة - (اختيارية) يتم ضبطها على صحيح للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. الإعداد التلقائي: خطأ.

عند تضمين العنصر <Claim>، يتم ضبط أسماء المطالبات بشكل ثابت عندما تهيئة السياسة. ويمكنك بدلاً من ذلك تمرير كائن JSON لتحديد أسماء المطالبات. بما أنّه يتم تمرير كائن JSON كمتغيّر، يتم في وقت التشغيل تحديد أسماء المطالبات في JWT الذي تم إنشاؤه.

على سبيل المثال:

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

يتضمن ملف JWT الذي تم إنشاؤه جميع المطالبات في كائن JSON.

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

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

يأخذ العنصر <Claim> السمات التالية:

  • name - (مطلوبة) اسم المطالبة.
  • ref - (اختيارية) اسم متغيّر التدفق. وفي حال توفّرها، ستستخدم السياسة القيمة التالية: المتغير مثل المطالبة. في حال تحديد كل من السمة ref وقيمة المطالبة الصريحة، سيتم وتكون القيمة الصريحة هي القيمة الافتراضية، ويتم استخدامها إذا لم يتم حل متغير التدفق المشار إليه.
  • type - (اختيارية) أحد الخيارات التالية: سلسلة (تلقائي) أو رقم أو قيمة منطقية أو خريطة
  • مصفوفة - (اختيارية) يتم ضبطها على صحيح للإشارة إلى ما إذا كانت القيمة مصفوفة من الأنواع. الإعداد التلقائي: خطأ.

&lt;CriticalHeaders&gt;

<CriticalHeaders>a,b,c</CriticalHeaders>

or:

<CriticalHeaders ref=variable_containing_headers/>

إضافة العنوان المهم، crit، إلى عنوان JWT. الرأس crit عبارة عن مصفوفة من أسماء العناوين التي يجب أن يعرفها ويتعرف عليها مستلم JWT. على سبيل المثال:

{
  “typ: “...”,
  “alg” : “...”,
  “crit” : [ “a”, “b”, “c” ],
}

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

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

&lt;CustomClaims&gt;

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

&lt;ExpiresIn&gt;

<ExpiresIn>time-value-here</ExpiresIn>

تحدّد عمر JWT بالمللي ثانية أو الثواني أو الدقائق أو الساعات أو الأيام.

تلقائي N/A
الحضور اختياري
النوع عدد صحيح
القيم الصالحة

قيمة أو مرجع إلى متغيّر تدفق يحتوي على القيمة. يمكن أن تكون الوحدات الزمنية المحددة على النحو التالي:

  • ملي ثانية = مللي ثانية (تلقائي)
  • s = ثانية
  • m = دقائق
  • h = ساعات
  • d = أيام

على سبيل المثال، قيمة ExpiresIn=10d تساوي ExpiresIn 864000.

&lt;Id&gt;

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

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

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

&lt;IgnoreUnresolvedVariables&gt;

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

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

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

&lt;Issuer&gt;

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

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

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

&lt;NotBefore&gt;

<!-- Specify an absolute time. -->
<NotBefore>2017-08-14T11:00:21-07:00</NotBefore>
 -or-
<!-- Specify a time relative to when the token is generated. -->
<NotBefore>6h</NotBefore>

تحدّد هذه السياسة الوقت الذي يصبح فيه الرمز المميّز صالحًا. سيظل الرمز المميّز غير صالح حتى الوقت المحدَّد. يمكنك تحديد قيمة وقت مطلقة أو وقت بالنسبة إلى وقت إنشاء الرمز المميّز.

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

قيم زمنية صالحة لعنصر NotBefore للقيم الزمنية المطلقة

الاسم التنسيق مثال
قابل للترتيب yyyy-MM-dd'T'HH:mm:ss.SSSZ 2017-08-14T11:00:21.269-0700
معيار RFC 1123 EEE, dd MMM yyyy HH:mm:ss zzz الاثنين 14 آب (أغسطس) 2017 الساعة 11:00:21 بتوقيت المحيط الهادئ
معيار RFC 850 EEEE, dd-MMM-yy HH:mm:ss zzz الاثنين من 14 إلى 17 أغسطس عند الساعة 11:00:21 بتوقيت المحيط الهادئ
ANCI-C EEE MMM d HH:mm:ss yyyy الاثنين 14 أغسطس 11:00:21 2017

بالنسبة إلى القيم الزمنية النسبية، حدِّد عددًا صحيحًا وفترة زمنية، على سبيل المثال:

  • 10 ث
  • 60 دقيقة
  • 12 ساعة

&lt;OutputVariable&gt;

<OutputVariable>jwt-variable</OutputVariable>

تحدِّد هذه السياسة مكان وضع JWT الذي تم إنشاؤه من خلال هذه السياسة. يتم وضعه تلقائيًا في متغير التدفق jwt.POLICYNAME.generated_jwt.

تلقائي jwt.POLICYNAME.generated_jwt
الحضور اختياري
النوع سلسلة (اسم متغيّر التدفق)

&lt;PrivateKey/Id&gt;

<PrivateKey>
  <Id ref="flow-variable-name-here"/>
</PrivateKey>

or

<PrivateKey>
  <Id>your-id-value-here</Id>
</PrivateKey>

تُحدِّد رقم تعريف المفتاح (kid) المطلوب تضمينه في عنوان JWT. الاستخدام فقط إذا كانت الخوارزمية هي RS256/RS384/RS512 أو PS256/PS384/PS512 أو ES256/ES384/ES512.

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

&lt;PrivateKey/Password&gt;

<PrivateKey>
  <Password ref="private.privatekey-password"/>
</PrivateKey>

حدِّد كلمة المرور التي يجب أن تستخدمها السياسة لفك تشفير المفتاح الخاص، إذا لزم الأمر. يمكنك استخدام ref لتمرير المفتاح في متغير التدفق. الاستخدام فقط إذا كانت الخوارزمية هي RS256/RS384/RS512 أو PS256/PS384/PS512 أو ES256/ES384/ES512.

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

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

&lt;PrivateKey/Value&gt;

<PrivateKey>
  <Value ref="private.variable-name-here"/>
</PrivateKey>

تحدّد هذه السياسة مفتاحًا خاصًا بترميز PEM يُستخدم لتوقيع JWT. استخدم سمة ref لتمرير في متغير التدفق. للاستخدام فقط عندما تكون الخوارزمية هي RS256/RS384/RS512، PS256/PS384/PS512 أو ES256/ES384/ES512.

تلقائي لا ينطبق
الحضور مطلوب لإنشاء JWT باستخدام خوارزمية RS256.
النوع سلسلة
القيم الصالحة متغيّر تدفق يحتوي على سلسلة تمثّل قيمة مفتاح خاص بترميز RSA بترميز PEM.

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

&lt;SecretKey/Id&gt;

<SecretKey>
  <Id ref="flow-variable-name-here"/>
</SecretKey>

or

<SecretKey>
  <Id>your-id-value-here</Id>
</SecretKey>

تحدّد هذه السياسة معرّف المفتاح (kid) المطلوب تضمينه في عنوان JWT الخاص بـ JWT الموقَّع باستخدام رمز HMAC. للخوارزمية. للاستخدام فقط إذا كانت الخوارزمية هي واحدة من HS256/HS384/HS512.

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

&lt;SecretKey/Value&gt;

<SecretKey>
  <Value ref="private.your-variable-name"/>
</SecretKey>

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

تفرض Edge حدًا أدنى لقوة المفتاح لخوارزميات HS256/HS384/HS512. الحد الأدنى لطول المفتاح يبلغ الحد الأقصى لحجم الملف في بروتوكول HS256 32 بايت، أمّا بالنسبة إلى HS384، فيبلغ 48 بايت، أمّا بالنسبة إلى HS512، فيبلغ 64 بايت. يؤدي استخدام مفتاح بقوة أقل إلى حدوث خطأ في بيئة التشغيل.

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

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

&lt;Subject&gt;

<Subject>subject-string-here</Subject>
أو
<Subject ref="flow_variable" />

على سبيل المثال:

<Subject ref="apigee.developer.email"/>

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

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

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

لا تضبط سياسة إنشاء JWT متغيّرات التدفق.

مرجع الخطأ

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Occurs when
steps.jwt.AlgorithmInTokenNotPresentInConfiguration 401 Occurs when the verification policy has multiple algorithms.
steps.jwt.AlgorithmMismatch 401 The algorithm specified in the Generate policy did not match the one expected in the Verify policy. The algorithms specified must match.
steps.jwt.FailedToDecode 401 The policy was unable to decode the JWT. The JWT is possibly corrupted.
steps.jwt.GenerationFailed 401 The policy was unable to generate the JWT.
steps.jwt.InsufficientKeyLength 401 For a key less than 32 bytes for the HS256 algorithm, less than 48 bytes for the HS386 algortithm, and less than 64 bytes for the HS512 algorithm.
steps.jwt.InvalidClaim 401 For a missing claim or claim mismatch, or a missing header or header mismatch.
steps.jwt.InvalidCurve 401 The curve specified by the key is not valid for the Elliptic Curve algorithm.
steps.jwt.InvalidJsonFormat 401 Invalid JSON found in the header or payload.
steps.jwt.InvalidToken 401 This error occurs when the JWT signature verification fails.
steps.jwt.JwtAudienceMismatch 401 The audience claim failed on token verification.
steps.jwt.JwtIssuerMismatch 401 The issuer claim failed on token verification.
steps.jwt.JwtSubjectMismatch 401 The subject claim failed on token verification.
steps.jwt.KeyIdMissing 401 The Verify policy uses a JWKS as a source for public keys, but the signed JWT does not include a kid property in the header.
steps.jwt.KeyParsingFailed 401 The public key could not be parsed from the given key information.
steps.jwt.NoAlgorithmFoundInHeader 401 Occurs when the JWT contains no algorithm header.
steps.jwt.NoMatchingPublicKey 401 The Verify policy uses a JWKS as a source for public keys, but the kid in the signed JWT is not listed in the JWKS.
steps.jwt.SigningFailed 401 In GenerateJWT, for a key less than the minimum size for the HS384 or HS512 algorithms
steps.jwt.TokenExpired 401 The policy attempts to verify an expired token.
steps.jwt.TokenNotYetValid 401 The token is not yet valid.
steps.jwt.UnhandledCriticalHeader 401 A header found by the Verify JWT policy in the crit header is not listed in KnownHeaders.
steps.jwt.UnknownException 401 An unknown exception occurred.
steps.jwt.WrongKeyType 401 Wrong type of key specified. For example, if you specify an RSA key for an Elliptic Curve algorithm, or a curve key for an RSA algorithm.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidNameForAdditionalClaim The deployment will fail if the claim used in the child element <Claim> of the <AdditionalClaims> element is one of the following registered names: kid, iss, sub, aud, iat, exp, nbf, or jti.
InvalidTypeForAdditionalClaim If the claim used in the child element <Claim> of the <AdditionalClaims> element is not of type string, number, boolean, or map, the deployment will fail.
MissingNameForAdditionalClaim If the name of the claim is not specified in the child element <Claim> of the <AdditionalClaims> element, the deployment will fail.
InvalidNameForAdditionalHeader This error ccurs when the name of the claim used in the child element <Claim> of the <AdditionalClaims> element is either alg or typ.
InvalidTypeForAdditionalHeader If the type of claim used in the child element <Claim> of the <AdditionalClaims> element is not of type string, number, boolean, or map, the deployment will fail.
InvalidValueOfArrayAttribute This error occurs when the value of the array attribute in the child element <Claim> of the <AdditionalClaims> element is not set to true or false.
InvalidConfigurationForActionAndAlgorithm If the <PrivateKey> element is used with HS Family algorithms or the <SecretKey> element is used with RSA Family algorithms, the deployment will fail.
InvalidValueForElement If the value specified in the <Algorithm> element is not a supported value, the deployment will fail.
MissingConfigurationElement This error will occur if the <PrivateKey> element is not used with RSA family algorithms or the <SecretKey> element is not used with HS Family algorithms.
InvalidKeyConfiguration If the child element <Value> is not defined in the <PrivateKey> or <SecretKey> elements, the deployment will fail.
EmptyElementForKeyConfiguration If the ref attribute of the child element <Value> of the <PrivateKey> or <SecretKey> elements is empty or unspecified, the deployment will fail.
InvalidVariableNameForSecret This error occurs if the flow variable name specified in the ref attribute of the child element <Value> of the <PrivateKey> or <SecretKey> elements does not contain the private prefix (private.).
InvalidSecretInConfig This error occurs if the child element <Value> of the <PrivateKey> or <SecretKey> elements does not contain the private prefix (private.).
InvalidTimeFormat If the value specified in the<NotBefore> element does not use a supported format, the deployment will fail.

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

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

المتغيرات المكان مثال
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>