سياسة HMAC

يتم الآن عرض مستندات 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 قيودًا إضافية، مثل الإزالة التلقائية للأحرف غير الأبجدية الرقمية.

يمكنك اختياريًا استخدام العنصر <displayname></displayname> لتصنيف السياسة في محرِّر الخادم الوكيل لواجهة مستخدم Apigee باسم مختلف بلغة عادية.

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

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

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

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

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

<Algorithm>

<Algorithm>algorithm-name</Algorithm>

تحدّد خوارزمية التجزئة لحساب HMAC.

تلقائي لا ينطبق
الحضور مطلوبة
النوع سلسلة
القيم الصالحة SHA-1 وSHA-224 وSHA-256 وSHA-384 وSHA-512 وMD-5

تقبل إعدادات السياسة أسماء الخوارزميات بدون تمييز حالة الأحرف، مع وضع شرطة بين الأحرف والأرقام أو بدونها . على سبيل المثال، الترميزان SHA256 وSHA-256 وsha256 متساويان.

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

إنّ القيمة التلقائية للسمة encoding هي base64.

الحضور اختياريّ. في حال عدم توفّر هذا العنصر، تضبط السياسة متغيّر التدفق hmac.POLICYNAME.output باستخدام قيمة بترميز base64.
النوع سلسلة
القيم الصالحة

بالنسبة إلى الترميز، hex أو base16 أو base64 أو base64url.

القيم غير حساسة لحالة الأحرف، وبالتالي فإنّ hex وbase16 مرادفان.

يمكن أن تكون القيمة النصية للعنصر Output أي اسم صالح لمتغيّر التدفق.

<SecretKey>

<SecretKey encoding='encoding_name' ref='private.secretkey'/>

تحدّد هذه العلامة المفتاح السري المستخدَم لحساب HMAC. ويتم الحصول على المفتاح من المتغيّر المُشار إليه، وفكّ ترميزه وفقًا للترميز المحدّد.

تلقائي

لا توجد قيمة تلقائية للمتغيّر المُشار إليه، والسمة ref مطلوبة.

في حال عدم توفّر سمة encoding، تفكّ السياسة تلقائيًا ترميز سلسلة المفتاح السري باستخدام UTF-8 للحصول على وحدات البايت الرئيسية.

الحضور مطلوبة
النوع سلسلة
القيم الصالحة

بالنسبة إلى encoding، القيم الصالحة هي hex وbase16 وbase64 وutf8. والترميز التلقائي هو UTF8. والقيم غير حساسة لحالة الأحرف، والشرطات غير مهمة. تتطابق السمة Base16 مع السمتَين base-16 وbAse16. Base16 وHex مرادفان.

من خلال استخدام سمة الترميز، يمكنك تحديد مفتاح يتضمّن وحدات بايت خارج نطاق أحرف UTF-8 القابلة للطباعة. على سبيل المثال، لنفترض أنّ إعدادات السياسة تتضمّن ما يلي:

 <SecretKey encoding='hex' ref='private.encodedsecretkey'/>

ولنفترض أن private.encodedsecretkey تحتوي على السلسلة 536563726574313233.

في هذه الحالة، سيتم فك ترميز وحدات البايت الرئيسية على النحو التالي: [53 65 63 72 65 74 31 32 33] (يتم تمثيل كل بايت بالنظام السداسي العشري). كمثال آخر، إذا كان encoding='base64' وprivate.encodedsecretkey يتضمنان السلسلة U2VjcmV0MTIz، سيؤدّي ذلك إلى الحصول على مجموعة البايت نفسها للمفتاح. في حال عدم استخدام سمة ترميز أو استخدام سمة ترميز UTF8، ستؤدي قيمة السلسلة Secret123 إلى الحصول على مجموعة البايت نفسها.

<VerificationValue>

<VerificationValue encoding='encoding_name' ref='variable_name'/>
or
<VerificationValue encoding='encoding_name'>string_value</VerificationValue>

(اختياري) تحدّد هذه السمة قيمة التحقّق، بالإضافة إلى خوارزمية الترميز التي تم استخدامها لترميز قيمة التحقّق. ستستخدم السياسة هذه الخوارزمية لفك ترميز القيمة.

تلقائي لا تتوفّر قيمة تلقائية لإثبات الملكية. في حال توفّر العنصر وغياب السمة encoding، تستخدم السياسة الترميز التلقائي base64.
الحضور إجراء اختياري
النوع سلسلة
القيم الصالحة

والقيم الصالحة لسمة الترميز هي: hex وbase16 وbase64 وbase64url. والقيمتان غير حساستين لحالة الأحرف، أما hex وbase16 هما مرادفان.

ولا يلزم أن يكون ترميز VerificationValue مطابقًا للترميز المستخدَم للعنصر Output.

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