شما در حال مشاهده مستندات 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 محدودیتهای بیشتری را اعمال میکند، مانند حذف خودکار کاراکترهایی که الفبایی-عددی نیستند. در صورت تمایل، از عنصر | ناموجود | مورد نیاز |
| ادامهخطا | برای بازگرداندن خطا در صورت عدم موفقیت یک سیاست، روی false تنظیم کنید. این رفتار برای اکثر سیاستها مورد انتظار است. برای ادامه اجرای جریان حتی پس از شکست یک سیاست، روی | نادرست | اختیاری |
| فعال شده | برای اعمال سیاست، روی true تنظیم کنید. برای "خاموش کردن" سیاست، روی | درست | اختیاری |
| ناهمگام | این ویژگی منسوخ شده است. | نادرست | منسوخ شده |
<الگوریتم>
<Algorithm>algorithm-name</Algorithm>
الگوریتم هش برای محاسبه HMAC را مشخص میکند.
| پیشفرض | ناموجود |
| حضور | مورد نیاز |
| نوع | رشته |
| مقادیر معتبر | SHA-1 ، SHA-224 ، SHA-256 ، SHA-384 ، SHA-512 و MD-5 پیکربندی سیاست، نام الگوریتمها را بدون تمایز حروف بزرگ و کوچک، و با یا بدون خط تیره بین حروف و اعداد میپذیرد. برای مثال، |
<نام نمایشی>
<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 را با مقداری با کدگذاری base64 تنظیم میکند. |
| نوع | رشته |
| مقادیر معتبر | برای رمزگذاری، مقادیر به حروف کوچک و بزرگ حساس نیستند؛ مقدار متنی عنصر |
<کلید مخفی>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
کلید مخفی مورد استفاده برای محاسبه HMAC را مشخص میکند. این کلید از متغیر ارجاعشده به دست میآید و طبق کدگذاری خاص رمزگشایی میشود.
| پیشفرض | هیچ مقدار پیشفرضی برای متغیر ارجاعشده وجود ندارد؛ ویژگی در غیاب ویژگی |
| حضور | مورد نیاز |
| نوع | رشته |
| مقادیر معتبر | برای استفاده از یک ویژگی کدگذاری به شما امکان میدهد کلیدی را مشخص کنید که شامل بایتهایی خارج از محدوده کاراکترهای قابل چاپ UTF-8 باشد. برای مثال، فرض کنید پیکربندی سیاست شامل این مورد باشد: <SecretKey encoding='hex' ref='private.encodedsecretkey'/> و فرض کنید در این حالت، بایتهای کلید به صورت زیر رمزگشایی میشوند: [53 65 63 72 65 74 31 32 33] (هر بایت به صورت هگز نمایش داده میشود). به عنوان مثال دیگر، اگر |
<مقدار تأیید>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(اختیاری) مقدار تأیید و همچنین الگوریتم رمزگذاری مورد استفاده برای رمزگذاری مقدار تأیید را مشخص میکند. این خطمشی از این الگوریتم برای رمزگشایی مقدار استفاده خواهد کرد.
| پیشفرض | هیچ مقدار تأیید پیشفرضی وجود ندارد. اگر عنصر موجود باشد اما ویژگی encoding وجود نداشته باشد، این خطمشی از کدگذاری پیشفرض base64 استفاده میکند. |
| حضور | اختیاری |
| نوع | رشته |
| مقادیر معتبر | مقادیر معتبر برای ویژگی encoding عبارتند از: رمزگذاری |
<نادیده گرفتن متغیرهای حل نشده>
<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>