أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X. info
تحسب هذه السياسة رمز مصادقة الرسائل المستند إلى التجزئة (HMAC) وتؤكّده. يستخدم HMAC، الذي يُعرف أحيانًا باسم "رمز مصادقة الرسائل المستند إلى مفتاح" أو "التجزئة المستندة إلى مفتاح"، وظيفة تجزئة مشفّرة، مثل SHA-1 أو SHA-224 أو SHA-256 أو SHA-384 أو SHA-512 أو MD-5، يتم تطبيقها على "رسالة" مع مفتاح سرّي لإنشاء توقيع أو رمز مصادقة رسالة على تلك الرسالة. يشير مصطلح "رسالة" هنا يشير إلى أي سلسلة من البايتات. يمكن لمرسِل الرسالة أيضًا إرسال HMAC إلى المستلِم، ويمكن للمستلِم استخدام HMAC لمصادقة الرسالة.
لمزيد من المعلومات عن HMAC، يُرجى الاطّلاع على HMAC: Keyed-Hashing for Message Authentication (rfc2104).
نماذج
إنشاء HMAC
<HMAC name='HMAC-1'> <Algorithm>SHA256</Algorithm> <SecretKey ref='private.secretkey'/> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional --> <!-- The "message" can include fixed and multiple variable parts, including newlines and static functions. Whitespace is significant. --> <Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message> <!-- default encoding is base64 --> <Output encoding='base16'>name_of_variable</Output> </HMAC>
تأكيد HMAC
<HMAC name='HMAC-1'> <Algorithm>SHA256</Algorithm> <SecretKey ref='private.secretkey'/> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional --> <!-- The "message" can include fixed and multiple variable parts, including newlines and static functions. Whitespace is significant. --> <Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message> <!-- VerificationValue is optional. Include it to perform an HMAC check. --> <VerificationValue encoding='base16' ref='expected_hmac_value'/> <!-- default encoding is base64 --> <Output encoding='base16'>name_of_variable</Output> </HMAC>
يتّبع كلّ من حساب التوقيع وتأكيده العملية نفسها تمامًا. تحسب سياسة HMAC رمز HMAC، ويمكنها اختياريًا تأكيد التوقيع المحسوب مقابل قيمة متوقّعة. يوجه العنصر VerificationValue الاختياري (إذا كان متوفرًا) السياسة إلى مقارنة القيمة المحسوبة بقيمة معروفة أو معيّنة
مرجع العناصر لسياسة HMAC
يصف مرجع السياسة عناصر وسمات سياسة HMAC.
السمات التي تنطبق على العنصر ذي المستوى الأعلى
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
السمات التالية مشتركة بين جميع العناصر الرئيسية للسياسة.
| السمة | الوصف | تلقائي | الوجود |
|---|---|---|---|
| name |
الاسم الداخلي للسياسة. الأحرف المسموح بها في الاسم هي:
A-Z0-9._\-$ %. ومع ذلك، تفرض واجهة مستخدم Apigee قيودًا إضافية
، مثل الإزالة التلقائية للأحرف غير الأبجدية الرقمية.
يمكنك اختياريًا استخدام العنصر |
لا ينطبق | مطلوب |
| continueOnError |
اضبط هذه السمة على false لعرض خطأ عند تعذُّر تنفيذ سياسة. هذا السلوك متوقّع
لمعظم السياسات.
اضبط هذه السمة على |
خطأ | اختياري |
| enabled |
اضبط هذه السمة على true لفرض السياسة.
اضبط هذه السمة على |
صحيح | اختياري |
| async | تم إيقاف هذه السمة نهائيًا. | خطأ | منهي العمل به |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
تحدّد هذه السمة خوارزمية التجزئة لحساب HMAC.
| تلقائي | لا ينطبق |
| الوجود | مطلوب |
| النوع | سلسلة |
| القيم الصالحة | SHA-1، SHA-224، SHA-256، SHA-384،
SHA-512، وMD-5
يقبل إعداد السياسة أسماء الخوارزميات بدون التمييز بين الأحرف الكبيرة والصغيرة، و
بوجود الشرطة بين الأحرف والأرقام أو بدونها . على سبيل المثال، |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
يمكنك استخدام هذه السمة بالإضافة إلى سمة name لتسمية السياسة في محرِّر الخادم الوكيل في واجهة مستخدم Apigee باسم مختلف بلغة طبيعية.
| تلقائي | إذا لم يتم تضمين هذا العنصر، يتم استخدام قيمة سمة name للسياسة. |
| الوجود | اختياري |
| النوع | سلسلة |
<Message>
<Message>message_template_here</Message> or <Message ref='variable_here'/>
تحدّد هذه السمة حمولة الرسالة المطلوب توقيعها. تقبل هذه السمة نماذج الرسائل (استبدال المتغيّرات) للسماح بتضمين عناصر إضافية في وقت التشغيل، مثل الطوابع الزمنية أو الأرقام العشوائية أو قوائم العناوين أو غير ذلك من المعلومات. على سبيل المثال:
<Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message>
يمكن أن يتضمّن نموذج الرسالة أجزاء ثابتة ومتغيّرة، بما في ذلك أسطر جديدة ووظائف ثابتة. للمساحات البيضاء أهمية.
| تلقائي | لا ينطبق |
| الوجود | مطلوب |
| النوع | سلسلة |
| القيم الصالحة | أي سلسلة صالحة لقيمة النص. إذا تم تقديم سمة ref،
ستكون لها الأولوية على قيمة النص. تُقيّم السياسة إما قيمة النص
أو المتغيّر المُشار إليه كنموذج رسالة. |
<Output>
<Output encoding='encoding_name'>variable_name</Output>
تحدّد هذه السمة اسم المتغيّر الذي يجب أن تضبطه السياسة باستخدام قيمة HMAC المحسوبة. تحدّد أيضًا الترميز المطلوب استخدامه للناتج.
| تلقائي |
متغيّر الناتج التلقائي هو القيمة التلقائية لسمة |
| الوجود | اختياري. إذا لم يكن هذا العنصر متوفرًا، تضبط السياسة متغيّر سير العمل
hmac.POLICYNAME.output بقيمة تم ترميزها باستخدام base64. |
| النوع | سلسلة |
| القيم الصالحة | بالنسبة إلى الترميز، تكون القيم الصالحة هي تُعدّ القيم غير حساسة لحالة الأحرف، و يمكن أن تكون قيمة النص للعنصر |
<SecretKey>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
تحدّد هذه السمة المفتاح السرّي المستخدَم لحساب HMAC. يتم الحصول على المفتاح من المتغيّر المُشار إليه ، ويتم فك ترميزه وفقًا للترميز المحدّد.
| تلقائي |
ليس هناك قيمة تلقائية للمتغيّر المُشار إليه؛
السمة في حال عدم توفّر سمة |
| الوجود | مطلوب |
| النوع | سلسلة |
| القيم الصالحة | بالنسبة إلى يسمح لك استخدام سمة ترميز بتحديد مفتاح يتضمّن بايتات خارج نطاق الأحرف القابلة للطباعة في UTF-8. على سبيل المثال، لنفترض أنّ إعداد السياسة يتضمّن ما يلي: <SecretKey encoding='hex' ref='private.encodedsecretkey'/>
ولنفترض أنّ
في هذه الحالة، سيتم فك ترميز بايتات المفتاح على النحو التالي: [53 65 63 72 65 74 31 32 33]
(كل بايت ممثّل بالصيغة السداسية العشرية). كمثال آخر، إذا كانت |
<VerificationValue>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(اختياري) تحدّد هذه السمة قيمة التأكيد، بالإضافة إلى خوارزمية الترميز التي تم استخدامها لترميز قيمة التأكيد. ستستخدم السياسة هذه الخوارزمية لفك ترميز القيمة.
| تلقائي | ليس هناك قيمة تأكيد تلقائية. إذا كان العنصر متوفرًا ولكن الـ
encoding غير متوفرة، تستخدم السياسة ترميزًا تلقائيًا هو base64 |
| الوجود | اختياري |
| النوع | سلسلة |
| القيم الصالحة |
القيم الصالحة لسمة الترميز هي: ليس من الضروري أن يكون ترميز |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
اضبط هذه السمة على false إذا كنت تريد أن تطرح السياسة خطأً عندما لا يمكن حلّ أي متغيّر مُشار إليه محدّد
في السياسة. اضبط هذه السمة على true لمعاملة أي متغيّر لا يمكن حلّه كسلسلة فارغة
(قيمة فارغة).
لا يؤثر البولياني IgnoreUnresolvedVariables إلا في المتغيّرات التي يُشار إليها من خلال الـ
نموذج الرسالة. على الرغم من إمكانية الإشارة إلى متغيّر من خلال SecretKey وVerificationValue، يجب أن يكون كل
منهما قابلاً للحلّ، لذا لا ينطبق إعداد ignore على هذين المتغيّرَين.
| تلقائي | خطأ |
| الوجود | اختياري |
| النوع | منطقي |
| القيم الصالحة | صحيح أو خطأ |
متغيّرات سير العمل
يمكن أن تضبط السياسة هذه المتغيّرات أثناء التنفيذ.
| متغيّر | الوصف | مثال |
|---|---|---|
hmac.policy_name.message |
تضبط السياسة هذا المتغيّر باستخدام الرسالة الفعّالة،
وهي نتيجة تقييم نموذج الرسالة المحدّد في العنصر Message. |
hmac.HMAC-Policy.message = "Hello, World" |
hmac.policy_name.output |
تحصل هذه السمة على نتيجة حساب HMAC، عندما لا يحدّد العنصر Output اسم متغيّر. |
hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4= |
hmac.policy_name.outputencoding |
تحصل هذه السمة على اسم ترميز الناتج. | hmac.HMAC-Policy.outputencoding = base64 |
مرجع الخطأ
يصف هذا القسم رموز الخطأ ورسائل الخطأ التي يتم عرضها ومتغيّرات الأخطاء التي تضبطها Apigee عندما تؤدي هذه السياسة إلى ظهور خطأ. هذه المعلومات مهمة لمعرفة ما إذا كنت تعمل على تطوير قواعد للأخطاء للتعامل معها. لمزيد من المعلومات، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن الأخطاء المتعلقة بالسياسات وأخطاء المعالجة.
أخطاء في وقت التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.
| رمز الخطأ | رموز حالة HTTP | يحدث عند |
|---|---|---|
steps.hmac.UnresolvedVariable |
401 | يحدث هذا الخطأ إذا كان أحد المتغيّرات المحددة في سياسة HMAC إما:
|
steps.hmac.HmacVerificationFailed |
401 | تعذّر التحقّق من بروتوكول HMAC، لأنّ قيمة التحقّق المقدّمة لا تتطابق مع القيمة المحسوبة. |
steps.hmac.HmacCalculationFailed |
401 | تعذَّر على السياسة احتساب شهادة HMAC. |
steps.hmac.EmptySecretKey |
401 | قيمة متغير المفتاح السري فارغة. |
steps.hmac.EmptyVerificationValue |
401 | المتغيّر الذي يحمل قيمة إثبات الملكية فارغ. |
أخطاء النشر
يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.
| اسم الخطأ | رموز حالة HTTP | يحدث عند |
|---|---|---|
steps.hmac.MissingConfigurationElement |
401 | يحدث هذا الخطأ عند عدم توفّر عنصر أو سمة مطلوبة. |
steps.hmac.InvalidValueForElement |
401 | يحدث هذا الخطأ إذا لم تكن القيمة المحددة في عنصر الخوارزمية ضمن إحدى القيم التالية: SHA-1 أو SHA-224 أو SHA-256 أو SHA-512 أو MD-5. |
steps.hmac.InvalidSecretInConfig |
401 | يحدث هذا الخطأ عند وجود قيمة نصية مقدّمة بشكل صريح إلى SecretKey. |
steps.hmac.InvalidVariableName |
401 | يحدث هذا الخطأ إذا لم يكن المتغيّر SecretKey يحتوي على البادئة private (private.). |
متغيّرات الأخطاء
يتم ضبط هذه المتغيّرات عند حدوث خطأ في بيئة التشغيل. لمزيد من المعلومات يُرجى الاطّلاع على القسم ما تحتاج إلى معرفته حول أخطاء السياسة.
| المتغيرات | المكان | مثال |
|---|---|---|
fault.name="fault_name" |
تمثّل السمة fault_name اسم الخطأ، كما هو موضّح في جدول أخطاء وقت التشغيل أعلاه. اسم الخطأ هو الأخير من رمز الخطأ. | fault.name Matches "UnresolvedVariable" |
hmac.policy_name.failed |
تحدّد السياسة هذا المتغيّر في حال عدم اكتمال العملية. | hmac.HMAC-Policy.failed = true |
مثال على استجابة الخطأ
لمعالجة الخطأ، أفضل ممارسة هي رصد الجزء errorcode من الخطأ
الاستجابة. لا تعتمد على النص في faultstring، لأنه قد يتغير.
مثال على قاعدة الخطأ
<FaultRules>
<FaultRule name="HMAC Policy Errors">
<Step>
<Name>AM-Unauthorized</Name>
<Condition>(fault.name Matches "HmacVerificationFailed")</Condition>
</Step>
<Condition>hmac.HMAC-1.failed = true</Condition>
</FaultRule>
</FaultRules>