خط‌مشی HMAC

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

«کد اصالت‌سنجی پیام درهم‌سازی‌شده» (HMAC) را محاسبه و درستی‌سنجی می‌کند. گاهی اوقات به‌عنوان «کد اصالت‌سنجی پیام کلیددار» یا «درهم‌سازی کلیددار» شناخته می‌شود، HMAC از تابع درهم‌سازی رمزنگاری مانند SHA-1،‏ SHA-224،‏ SHA-256،‏ SHA-384،‏ SHA-512، یا MD-5 استفاده می‌کند که روی «پیام» اعمال می‌شود، همراه با کلید مخفی، تا امضا یا کد اصالت‌سنجی پیام را روی آن پیام تولید کند. اصطلاح «پیام» در اینجا به هر جاری‌سازی بایت اشاره دارد. فرستنده پیام می‌تواند یک HMAC را نیز به گیرنده ارسال کند، و گیرنده می‌تواند از HMAC برای اصالت‌سنجی پیام استفاده کند.

برای کسب اطلاعات بیشتر درباره HMAC، به HMAC: درهم‌سازی کلیددار برای اصالت‌سنجی پیام (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 با نامی متفاوت و به زبان طبیعی استفاده کنید.

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

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

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

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

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

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

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

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

<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 وقتی عنصر 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>