خط مشی 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 با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

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

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

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

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

<الگوریتم>

<Algorithm>algorithm-name</Algorithm>

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

پیش فرض N/A
حضور مورد نیاز
تایپ کنید رشته
مقادیر معتبر 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_template_here</Message>
or
<Message ref='variable_here'/>

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

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

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

پیش فرض N/A
حضور مورد نیاز
تایپ کنید رشته
مقادیر معتبر هر رشته ای برای مقدار متن معتبر است. اگر یک ویژگی 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 را تنظیم کنید تا هر متغیر غیرقابل حلی را به عنوان یک رشته خالی (تهی) در نظر بگیرید.

Boolean IgnoreUnresolvedVariables فقط بر متغیرهایی اثر می‌گذارد که توسط الگوی پیام ارجاع داده می‌شوند. در حالی که SecretKey و VerificationValue می‌توانند به یک متغیر ارجاع دهند، هر دوی آن‌ها باید قابل حل باشند، بنابراین تنظیم ignore برای آن‌ها اعمال نمی‌شود.

پیش فرض نادرست
حضور اختیاری
تایپ کنید بولی
مقادیر معتبر درست یا نادرست

متغیرهای جریان

خط مشی می تواند این متغیرها را در حین اجرا تنظیم کند.

متغیر توضیحات مثال
hmac. policy_name .message خط مشی این متغیر را با پیام مؤثر تنظیم می کند که نتیجه ارزیابی الگوی پیام مشخص شده در عنصر Message است. hmac.HMAC-Policy.message = "Hello, World"
hmac. policy_name .output زمانی که عنصر Output نام متغیری را مشخص نمی کند، نتیجه محاسبه HMAC را دریافت می کند. 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>