سياسة CREATEJWS

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

الأدوات المستخدمة

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

للتعرّف على أجزاء JWS وكيفية تشفيرها وتوقيعها، يُرجى الرجوع إلى RFC7515.

فيديو

شاهِد فيديو قصيرًا لمعرفة كيفية إنشاء رمز JWT موقَّع. مع أنّ هذا الفيديو مخصّص لإنشاء رمز JWT، إلا أنّ العديد من المفاهيم تنطبق أيضًا على JWS.

نماذج

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

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

يحتوي JWS المرفق على العنوان والحمولة والتوقيع بترميز:

header.payload.signature

اضبط قيمة <DetachContent> على "صحيح" لإنشاء محتوى منفصل. يمكنك الاطّلاع على أجزاء JWS/JWT لمعرفة المزيد عن بنية JWS وتنسيقه.

استخدِم العنصر <Payload> لتحديد حمولة JWS الأولية غير المشفرة. في هذا المثال، يحتوي المتغيّر على الحمولة. عندما يتم تشغيل إجراء السياسة هذا، يحوّل Edge ترميز عنوان JWS والحِمل، ثم يضيف التوقيع المحوّل ترميزه للتوقيع رقميًا على JWS.

تنشئ إعدادات السياسة أدناه توقيع JWS من حمولة مضمّنة في المتغيّر private.payload.

<GenerateJWS name="JWS-Generate-HS256">
    <DisplayName>JWS Generate HS256</DisplayName>
    <Algorithm>HS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <Payload ref="private.payload" />
    <OutputVariable>jws-variable</OutputVariable>
</GenerateJWS>

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

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

يحذف JWS المنفصل الحمولة من JWS:

header..signature

استخدِم العنصر <Payload> لتحديد حمولة JWS الأولية غير المشفرة. عند تفعيل هذه السياسة، يشفّر Edge عنوان JWS والحِمل، ثم يستخدمهما لإنشاء التوقيع المشفّر. ومع ذلك، لا يتضمّن JWS الذي تم إنشاؤه الحمولة. يعود إليك أمر تمرير الحمولة إلى سياسة VerifyJWS باستخدام العنصر <DetachedContent> في سياسة VerifyJWS.

<GenerateJWS name="JWS-Generate-RS256">
    <DisplayName>JWS Generate RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PrivateKey>
        <Value ref="private.privatekey"/>
        <Password ref="private.privatekey-password"/>
        <Id ref="private.privatekey-id"/>
    </PrivateKey>
    <Payload ref="private.payload" />
    <DetachContent>true</DetachContent>
    <OutputVariable>jws-variable</OutputVariable>
</GenerateJWS>

ضبط العناصر الرئيسية

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

خوارزمية العناصر الأساسية
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> اختياريان.

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

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

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

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

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

<GenerateJWS name="JWS" continueOnError="false" enabled="true" async="false">

السمات التالية مشتركة بين جميع العناصر الرئيسية للسياسة.

السمة الوصف تلقائي التواجد
الاسم الاسم الداخلي للسياسة. تقتصر الأحرف التي يمكنك استخدامها في الاسم على: A-Z0-9._\-$ %. ومع ذلك، تفرض واجهة مستخدم إدارة Edge قيودًا إضافية، مثل إزالة الأحرف غير الأبجدية الرقمية تلقائيًا.

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

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

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

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

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

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

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

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

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

<Algorithm>

<Algorithm>algorithm-here</Algorithm>

تحدّد هذه السمة خوارزمية التشفير لتوقيع الرمز المميّز.

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

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

يضع أزواج اسم/قيمة المطالبة الإضافية في العنوان الخاص بـ JWS.

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

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

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

<CriticalHeaders>

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

or:

<CriticalHeaders ref=variable_containing_headers/>

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

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

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

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

<DetachContent>

<DetachContent>true|false</DetachContent>

تحدّد هذه السمة ما إذا كان سيتم إنشاء JWS مع بيانات أساسية منفصلة، <DetachContent>true</DetachContent>، أو بدونها، <DetachContent>false</DetachContent>.

إذا حدّدت القيمة false، وهي القيمة التلقائية، سيكون JWS الذي تم إنشاؤه على النحو التالي:

header.payload.signature

إذا حدّدت القيمة true لإنشاء حمولة منفصلة، سيتم حذف الحمولة من JWS الذي تم إنشاؤه وسيكون بالتنسيق التالي:

header..signature

في حال استخدام حمولة منفصلة، يعود إليك أمر تمرير الحمولة الأصلية غير المشفرة إلى سياسة VerifyJWS باستخدام العنصر <DetachedContent> في سياسة VerifyJWS.

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

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

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

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

<OutputVariable>

<OutputVariable>JWS-variable</OutputVariable>

تحدّد هذه السمة المكان الذي سيتم فيه وضع JWS الذي تم إنشاؤه بواسطة هذه السياسة. يتم وضعه تلقائيًا في متغيّر التدفق jws.POLICYNAME.generated_jws.

تلقائي jws.POLICYNAME.generated_jws
التواجد اختياري
النوع سلسلة (اسم متغيّر سير عمل)

<Payload>

<Payload ref="flow-variable-name-here" />

or

<Payload>payload-value</Payload>

تحدّد هذه السمة حمولة JWS الأولية غير المشفرة. حدِّد متغيّرًا يحتوي على الحمولة أو سلسلة.

تلقائي لا ينطبق
التواجد مطلوب
النوع سلسلة أو مصفوفة بايت أو بث أو أي تمثيل آخر لحمولة JWS غير المشفرة

<PrivateKey/Id>

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

or

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

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

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

<PrivateKey/Password>

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

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

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

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

<PrivateKey/Value>

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

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

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

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

<SecretKey/Id>

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

or

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

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

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

<SecretKey/Value>

<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". على سبيل المثال، private.mysecret

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

لا تضبط سياسة Generate JWS متغيّرات التدفق.

مرجع الخطأ

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

أخطاء في وقت التشغيل

يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.

رمز الخطأ رموز حالة HTTP يحدث عند
steps.jws.GenerationFailed 401 تعذَّر على السياسة إنشاء JWS.
steps.jws.InsufficientKeyLength 401 بالنسبة إلى مفتاح أقل من 32 بايت لخوارزمية HS256
steps.jws.InvalidClaim 401 بسبب عدم تطابق مطالبة أو مطالبة، أو عدم تطابق العنوان أو العنوان.
steps.jws.InvalidCurve 401 المنحنى المحدد بالمفتاح غير صالح لخوارزمية المنحنى البيضاوي.
steps.jws.InvalidJsonFormat 401 تم العثور على تنسيق JSON غير صالح في عنوان JWS.
steps.jws.InvalidPayload 401 حمولة JWS غير صالحة.
steps.jws.InvalidSignature 401 تم حذف <DetachedContent> ولديها حمولة بيانات منفصلة في JWS.
steps.jws.KeyIdMissing 401 تستخدم سياسة "التحقّق" رمز JWKS كمصدر للمفاتيح العامة، إلا أنّ سياسة JWS الموقَّعة لا تتضمّن السمة kid في العنوان.
steps.jws.KeyParsingFailed 401 تعذّر تحليل المفتاح العام من المعلومات الأساسية المحددة.
steps.jws.MissingPayload 401 حمولة JWS مفقودة.
steps.jws.NoAlgorithmFoundInHeader 401 يحدث عندما تغفل JWS عنوان الخوارزمية.
steps.jws.SigningFailed 401 في CREATEJWS لمفتاح أقل من الحد الأدنى للحجم لخوارزميات HS384 أو HS512
steps.jws.UnknownException 401 حدث استثناء غير معروف.
steps.jws.WrongKeyType 401 تم تحديد نوع خاطئ للمفتاح. على سبيل المثال، إذا حدّدت مفتاح RSA لخوارزمية "منحنى بيضاوي" أو مفتاح منحنى لخوارزمية RSA.

أخطاء النشر

يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.

اسم الخطأ يحدث عند
InvalidAlgorithm القيم الصالحة الوحيدة هي: RS256 وRS384 وRS512 وPS256 وPS384 وPS512 وES256 وES384 وES512 وHS256 وHS384 وHS512.

EmptyElementForKeyConfiguration

FailedToResolveVariable

InvalidConfigurationForActionAndAlgorithmFamily

InvalidConfigurationForVerify

InvalidEmptyElement

InvalidFamiliesForAlgorithm

InvalidKeyConfiguration

InvalidNameForAdditionalClaim

InvalidNameForAdditionalHeader

InvalidPublicKeyId

InvalidPublicKeyValue

InvalidSecretInConfig

InvalidTypeForAdditionalClaim

InvalidTypeForAdditionalHeader

InvalidValueForElement

InvalidValueOfArrayAttribute

InvalidVariableNameForSecret

MissingConfigurationElement

MissingElementForKeyConfiguration

MissingNameForAdditionalClaim

MissingNameForAdditionalHeader

أخطاء النشر المحتملة الأخرى

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

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

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

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

لمعالجة الخطأ، أفضل ممارسة هي رصد الجزء errorcode من الخطأ الاستجابة. لا تعتمد على النص في faultstring، لأنه قد يتغير.

مثال على قاعدة الخطأ

<FaultRules>
    <FaultRule name="JWS Policy Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "TokenExpired")</Condition>
        </Step>
        <Condition>JWS.failed=true</Condition>
    </FaultRule>
</FaultRules>