سياسة HMAC

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

يحتسب رمز مصادقة الرسائل المستند إلى التجزئة (HMAC) ويتحقق منه. أحيانًا والمعروفة باسم رمز مصادقة الرسائل المشفرة أو التجزئة المشفرة، فإن بروتوكول HMAC يستخدم تجزئة مشفرة مثل SHA-1 أو SHA-224 أو SHA-256 أو SHA-384 أو SHA-512 أو MD-5، يتم تطبيقها على "رسالة"، إلى جانب المفتاح السري، لإنتاج رمز مصادقة أو توقيع على تلك الرسالة مصطلح "رسالة" هنا يشير إلى أي تدفق من وحدات البايت. كما يمكن لمرسل الرسالة أن يرسل أيضًا HMAC إلى المتلقي، ويمكن للمستلم استخدام بروتوكول HMAC لمصادقة الرسالة.

ولمعرفة المزيد من المعلومات عن دالة HMAC، راجِع القسم HMAC: التجزئة باستخدام المفاتيح لمصادقة الرسالة (mailto2104).

نماذج

إنشاء رمز مصادقة الرسائل المستندة إلى التجزئة (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، ويمكنها اختياريًا التحقق من البيانات المحسوبة التوقيع مقابل قيمة متوقعة. العنصر الاختياري VerifyValue (في حال توفّره) توجّه السياسة للتحقق من القيمة المحسوبة مقابل قيمة معروفة أو معينة


مرجع عنصر لعنصر HMAC

يصف مرجع السياسة عناصر سياسة HMAC وسماتها.

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

<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">

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

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

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

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

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

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

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

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

&lt;Algorithm&gt;

<Algorithm>algorithm-name</Algorithm>

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

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

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

&lt;DisplayName&gt;

<DisplayName>Policy Display Name</DisplayName>

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

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

&lt;Message&gt;

<Message>message_template_here</Message>
or
<Message ref='variable_here'/>

تُحدِّد حمولة الرسالة المطلوب توقيعها. يدعم إدخال هذا العنصر نماذج الرسائل (الاستبدال المتغير) للسماح بتضمين عناصر إضافية في وقت التشغيل، مثل الطوابع الزمنية والقيم المفقودة وقوائم العناصر أو الرؤوس أو المعلومات الأخرى. على سبيل المثال:

<Message>Fixed Part
    {a_variable}
    {timeFormatUTCMs(timeFormatString1,system.timestamp)}
    {nonce}
</Message>

يمكن أن يتضمّن نموذج الرسالة أجزاءً ثابتة ومتغيّرة، بما في ذلك الأسطر الجديدة والدوال الثابتة. المسافات البيضاء مهمة.

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

&lt;Output&gt;

<Output encoding='encoding_name'>variable_name</Output>

تُحدِّد هذه السياسة اسم المتغيّر الذي يجب أن تضبطه السياسة باستخدام قيمة HMAC المحسوبة. يحدد أيضًا الترميز الذي سيتم استخدامه للمخرجات.

تلقائي

متغيّر الإخراج التلقائي هو hmac.POLICYNAME.output.

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

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

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

القيم غير حساسة لحالة الأحرف؛ hex وbase16 مرادفان.

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

&lt;SecretKey&gt;

<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 نفس مجموعة البايت.

&lt;VerificationValue&gt;

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

&lt;IgnoreUnresolvedVariables&gt;

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

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

لا تؤثر القيمة المنطقية UnknownUnresolvedVariables فقط في المتغيرات المشار إليها بواسطة نموذج الرسالة. في حين أن 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>