سياسة HMAC

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

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

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

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

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

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

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

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

يمكنك استخدام هذه السمة بالإضافة إلى سمة 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.

القيمة التلقائية لسمة 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 لمعاملة أي متغيّر لا يمكن حلّه كسلسلة فارغة (قيمة فارغة).

لا يؤثر البولياني 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>