خط مشی HMAC

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

یک کد احراز هویت پیام مبتنی بر هش (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">

ویژگی‌های زیر برای همه عناصر والد سیاست مشترک هستند.

ویژگی توضیحات پیش‌فرض حضور
نام نام داخلی سیاست. کاراکترهایی که می‌توانید در نام استفاده کنید به موارد زیر محدود شده‌اند: A-Z0-9._\-$ % . با این حال، رابط کاربری Apigee محدودیت‌های بیشتری را اعمال می‌کند، مانند حذف خودکار کاراکترهایی که الفبایی-عددی نیستند.

در صورت تمایل، از عنصر <displayname></displayname> برای برچسب‌گذاری سیاست در ویرایشگر پروکسی Apigee UI با یک نام متفاوت به زبان طبیعی استفاده کنید.

ناموجود مورد نیاز
ادامهخطا برای بازگرداندن خطا در صورت عدم موفقیت یک سیاست، روی false تنظیم کنید. این رفتار برای اکثر سیاست‌ها مورد انتظار است.

برای ادامه اجرای جریان حتی پس از شکست یک سیاست، روی true تنظیم شود.

نادرست اختیاری
فعال شده برای اعمال سیاست، روی true تنظیم کنید.

برای "خاموش کردن" سیاست، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان متصل باقی بماند، اجرا نخواهد شد.

درست اختیاری
ناهمگام این ویژگی منسوخ شده است. نادرست منسوخ شده

<الگوریتم>

<Algorithm>algorithm-name</Algorithm>

الگوریتم هش برای محاسبه HMAC را مشخص می‌کند.

پیش‌فرض ناموجود
حضور مورد نیاز
نوع رشته
مقادیر معتبر SHA-1 ، SHA-224 ، SHA-256 ، SHA-384 ، SHA-512 و MD-5

پیکربندی سیاست، نام الگوریتم‌ها را بدون تمایز حروف بزرگ و کوچک، و با یا بدون خط تیره بین حروف و اعداد می‌پذیرد. برای مثال، SHA256 و SHA-256 و sha256 معادل هستند.

<نام نمایشی>

<DisplayName>Policy Display Name</DisplayName>

علاوه بر ویژگی نام، از این ویژگی برای برچسب‌گذاری سیاست در ویرایشگر پروکسی Apigee UI با یک نام متفاوت به زبان طبیعی استفاده کنید.

پیش‌فرض اگر این عنصر را حذف کنید، از مقدار ویژگی name مربوط به سیاست استفاده می‌شود.
حضور اختیاری
نوع رشته

<پیام>

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

بار پیام برای امضا را مشخص می‌کند. ورودی این عنصر از قالب‌های پیام (جایگزینی متغیر) پشتیبانی می‌کند تا امکان افزودن موارد اضافی در زمان اجرا، مانند مهرهای زمانی، عدم قطعیت‌ها، لیست هدرها یا سایر اطلاعات، فراهم شود. به عنوان مثال:

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

قالب پیام می‌تواند شامل بخش‌های ثابت و متغیر، از جمله خطوط جدید و توابع استاتیک باشد. فضای خالی (Whitespace) مهم است.

پیش‌فرض ناموجود
حضور مورد نیاز
نوع رشته
مقادیر معتبر هر رشته‌ای برای مقدار متنی معتبر است. اگر یک ویژگی 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 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 را در خود نگه دارد، منجر به همان مجموعه بایت‌ها برای کلید می‌شود. بدون هیچ ویژگی encoding یا با ویژگی encoding UTF8 ، مقدار رشته Secret123 منجر به همان مجموعه بایت‌ها خواهد شد.

<مقدار تأیید>

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

(اختیاری) مقدار تأیید و همچنین الگوریتم رمزگذاری مورد استفاده برای رمزگذاری مقدار تأیید را مشخص می‌کند. این خط‌مشی از این الگوریتم برای رمزگشایی مقدار استفاده خواهد کرد.

پیش‌فرض هیچ مقدار تأیید پیش‌فرضی وجود ندارد. اگر عنصر موجود باشد اما ویژگی encoding وجود نداشته باشد، این خط‌مشی از کدگذاری پیش‌فرض base64 استفاده می‌کند.
حضور اختیاری
نوع رشته
مقادیر معتبر

مقادیر معتبر برای ویژگی encoding عبارتند از: hex ، base16 ، base64 ، base64url . مقادیر به حروف کوچک و بزرگ حساس نیستند؛ hex و base16 مترادف هستند.

رمزگذاری VerificationValue نیازی نیست با رمزگذاری مورد استفاده برای عنصر Output یکسان باشد.

<نادیده گرفتن متغیرهای حل نشده>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

اگر می‌خواهید سیاست در صورت غیرقابل حل بودن هر متغیر ارجاع‌شده در سیاست، خطا صادر کند، روی false تنظیم کنید. اگر می‌خواهید هر متغیر غیرقابل حل را به عنوان یک رشته خالی (null) در نظر بگیرید، روی 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 نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. 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>