يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
احتساب رمز مصادقة الرسائل المستند إلى التجزئة (HMAC) والتحقق منه يُعرف HMAC أحيانًا باسم رمز مصادقة الرسائل المكيّفة أو التجزئة المرتبطة بالمفاتيح، ويستخدم وظيفة تجزئة مشفرة مثل SHA-1 أو SHA-224 أو SHA-256 أو SHA-384 أو SHA-512 أو MD-5 التي يتم تطبيقها على "رسالة" مع مفتاح سري لإنشاء توقيع أو رمز مصادقة رسالة على تلك الرسالة. ويشير مصطلح "رسالة" هنا إلى أي مصدر بيانات. يمكن لمرسِل الرسالة أيضًا إرسال رمز HMAC إلى المستلِم، ويمكن للمستلِم استخدام نظام HMAC لمصادقة الرسالة.
لمزيد من المعلومات حول HMAC، يمكنك الاطّلاع على HMAC: التجزئة المستندة إلى المفاتيح لمصادقة الرسائل (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، ويمكنها اختياريًا التحقّق من التوقيع المحسوب مقابل قيمة متوقّعة. إنّ العنصر الاختياري reCAPTCHAValue (في حال توفّره) يوجّه السياسة للتحقق من القيمة المحسوبة مقابل قيمة معروفة أو محدّدة.
مرجع عنصر HMAC
يصف مرجع السياسة عناصر وسمات سياسة HMAC.
السمات التي تنطبق على عنصر المستوى الأعلى
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
السمات التالية شائعة في جميع العناصر الرئيسية للسياسة.
السمة | الوصف | تلقائي | الحضور |
---|---|---|---|
اسم |
الاسم الداخلي للسياسة تقتصر الأحرف التي يمكنك استخدامها في الاسم على:
A-Z0-9._\-$ % . ومع ذلك، تفرض واجهة مستخدم Apigee قيودًا إضافية، مثل الإزالة التلقائية للأحرف غير الأبجدية الرقمية.
يمكنك اختياريًا استخدام العنصر |
لا ينطبق | مطلوبة |
continueOnError |
اضبط القيمة على false لعرض رسالة خطأ عند تعذُّر تنفيذ السياسة. وهو سلوك متوقّع لمعظم السياسات.
اضبط القيمة على |
false | إجراء اختياري |
مفعّلة |
اضبط القيمة على true لفرض السياسة.
اضبط القيمة على |
صحيح | إجراء اختياري |
async | تم إيقاف هذه السمة نهائيًا. | false | منهي العمل به |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
تحدّد خوارزمية التجزئة لحساب HMAC.
تلقائي | لا ينطبق |
الحضور | مطلوبة |
النوع | سلسلة |
القيم الصالحة | SHA-1 وSHA-224 وSHA-256 وSHA-384
وSHA-512 وMD-5
تقبل إعدادات السياسة أسماء الخوارزميات بدون تمييز حالة الأحرف،
مع وضع شرطة بين الأحرف والأرقام أو بدونها . على سبيل المثال، الترميزان |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
يمكنك استخدامها بالإضافة إلى سمة الاسم لتصنيف السياسة في محرِّر الخادم الوكيل لواجهة مستخدم Apigee باستخدام اسم مختلف بلغة طبيعية.
تلقائي | إذا لم تستخدم هذا العنصر، يتم استخدام قيمة سمة الاسم الخاصة بالسياسة. |
الحضور | إجراء اختياري |
النوع | سلسلة |
<Message>
<Message>message_template_here</Message> or <Message ref='variable_here'/>
تحدِّد هذه العلامة حمولة الرسالة المطلوب توقيعها. يتيح إدخال هذا العنصر نماذج الرسائل (الاستبدال المتغيّر) للسماح بتضمين عناصر إضافية في وقت التشغيل، مثل الطوابع الزمنية أو الأرقام الخاصة أو قوائم العناوين أو معلومات أخرى. مثال:
<Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message>
ويمكن أن يتضمّن نموذج الرسالة أجزاءً ثابتة ومتغيرة، بما في ذلك الأسطر الجديدة والدوال الثابتة. المسافة البيضاء كبيرة.
تلقائي | لا ينطبق |
الحضور | مطلوبة |
النوع | سلسلة |
القيم الصالحة | وتكون أي سلسلة صالحة للقيمة النصية. إذا قدّمت السمة ref ،
ستكون لها الأولوية على القيمة النصية. تقيّم السياسة إما القيمة النصية أو المتغيّر المشار إليه كنموذج رسالة. |
<الإخراج>
<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
للتعامل مع أي متغيّر غير قابل للتحليل كسلسلة فارغة (فارغ).
تؤثر القيمة المنطقية تجاهلUnresolvedVariables فقط في المتغيرات المشار إليها من خلال نموذج الرسالة. ومع أنّ السمة 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>