سياسة 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

Error reference

This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Occurs when
steps.hmac.UnresolvedVariable 401

This error occurs if a variable specified in the HMAC policy is either:

  • Out of scope (not available in the specific flow where the policy is being executed)

    or

  • Can't be resolved (is not defined)
steps.hmac.HmacVerificationFailed 401 The HMAC verification failed; the verification value provided does not match the calculated value.
steps.hmac.HmacCalculationFailed 401 The policy was unable to calculate the HMAC.
steps.hmac.EmptySecretKey 401 The value of the secret key variable is empty.
steps.hmac.EmptyVerificationValue 401 The variable holding the verification value is empty.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name HTTP status Occurs when
steps.hmac.MissingConfigurationElement 401 This error occurs when a required element or attribute is missing.
steps.hmac.InvalidValueForElement 401 This error occurs if the value specified in the Algorithm element is not one of the following values: SHA-1, SHA-224, SHA-256, SHA-512, or MD-5.
steps.hmac.InvalidSecretInConfig 401 This error occurs if there is a text value explicitly provided for SecretKey.
steps.hmac.InvalidVariableName 401 This error occurs if the SecretKey variable does not contain the private prefix (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>