شما در حال مشاهده اسناد 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 محدودیتهای بیشتری را اعمال میکند، مانند حذف خودکار کاراکترهایی که حروف عددی نیستند. در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است. روی | نادرست | اختیاری |
فعال شد | برای اجرای خط مشی روی true تنظیم کنید. برای "خاموش کردن" خط مشی، روی | درست است | اختیاری |
ناهمگام | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
<الگوریتم>
<Algorithm>algorithm-name</Algorithm>
الگوریتم هش را برای محاسبه HMAC مشخص می کند.
پیش فرض | N/A |
حضور | مورد نیاز |
تایپ کنید | رشته |
مقادیر معتبر | SHA-1 ، SHA-224 ، SHA-256 ، SHA-384 ، SHA-512 ، و MD-5 پیکربندی خط مشی نام الگوریتم ها را بدون حروف متمایز، و با یا بدون خط تیره بین حروف و اعداد می پذیرد. به عنوان مثال، |
<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 را با مقدار کدگذاری شده با base64 تنظیم می کند. |
تایپ کنید | رشته |
مقادیر معتبر | برای رمزگذاری، مقادیر به حروف بزرگ و کوچک حساس نیستند. مقدار متن عنصر |
<SecretKey>
<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>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(اختیاری) مقدار تأیید و همچنین الگوریتم رمزگذاری که برای رمزگذاری مقدار تأیید استفاده شده است را مشخص می کند. خط مشی از این الگوریتم برای رمزگشایی مقدار استفاده می کند.
پیش فرض | هیچ مقدار تأیید پیش فرض وجود ندارد. اگر عنصر موجود باشد اما ویژگی encoding وجود نداشته باشد، این خطمشی از یک رمزگذاری پیشفرض base64 استفاده میکند. |
حضور | اختیاری |
تایپ کنید | رشته |
مقادیر معتبر | مقادیر معتبر برای ویژگی رمزگذاری عبارتند از: رمزگذاری |
<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>