درحال مشاهده اسناد 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» محدودیتهای بیشتری را اعمال میکند،
مثلاً نویسههایی را که الفبایی عددی نیستند بهطور خودکار برمیدارد.
بهصورت اختیاری، از عنصر |
موجود نیست | الزامی |
| continueOnError |
برای برگرداندن خطا درصورت ناموفق بودن خطمشی، روی false تنظیم کنید. این رفتار برای اکثر خطمشیها
قابلانتظار است.
روی |
نادرست | اختیاری |
| فعال شد |
برای اجرای خطمشی، روی true تنظیم کنید.
برای «خاموش کردن» خطمشی، روی |
درست | اختیاری |
| غیرهمگام | این مشخصه منسوخ شده است. | نادرست | منسوخ |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
الگوریتم درهمسازی را برای محاسبه HMAC مشخص میکند.
| پیشفرض | موجود نیست |
| حضور | الزامی |
| تایپ کردن | رشته |
| مقادیر معتبر | SHA-1، SHA-224، SHA-256، SHA-384،
SHA-512، و MD-5
پیکربندی خطمشی نامهای الگوریتم را بدون درنظر گرفتن حروف بزرگ و کوچک، و
با یا بدون خط تیره بین حروف و اعداد میپذیرد . برای مثال، |
<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 را با مقدار کدبندیشده 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 تنظیم کنید.
متغیر بولی 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>