מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע

מחשב ומאמת קוד אימות הודעות (HMAC) מבוסס גיבוב. לפעמים שנקרא 'קוד אימות הודעות עם מפְתח' (Keyed Message Authentication Code), או גיבוב (hash) עם קידוד, HMAC משתמש בגיבוב קריפטוגרפי פונקציה כמו SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 או MD-5, שהוחלו על 'הודעה', וגם מפתח סודי, כדי להפיק חתימה או קוד אימות הודעה בהודעה הזו. המונח 'הודעה' לדף הזה מתייחס לכל זרם של בייטים. מי ששולח הודעה יכול גם לשלוח HMAC למקלט, והמקבל יכול להשתמש ב-HMAC כדי לאמת את ההודעה.
למידע נוסף על HMAC: צפייה ב-HMAC: Keyed-Hashing עבור אימות הודעות (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 ויכולה באופן אופציונלי לאמת את המחושב וחתימה על ערך מצופה. הרכיב האופציונלי ValidValue (אם קיים) מנחה את המדיניות לבדוק את הערך המחושב מול ערך ידוע או נתון עם ערך מסוים.
הפניה לרכיבים ל-HMAC
בחומר העזר בנושא המדיניות מתוארים הרכיבים והמאפיינים של מדיניות HMAC.
מאפיינים החלה על הרכיב ברמה העליונה
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
המאפיינים הבאים משותפים לכל רכיבי ההורה של המדיניות.
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
שם |
השם הפנימי של המדיניות. תווים שבהם אפשר להשתמש בשם מוגבלים ל:
A-Z0-9._\-$ % אבל ממשק המשתמש של Apigee אוכף
הגבלות, כגון הסרה אוטומטית של תווים שאינם אלפאנומריים.
אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך false כדי להחזיר שגיאה כשמדיניות נכשלת. המצב הזה צפוי
של רוב כללי המדיניות.
יש להגדיר ל- |
false | אופציונלי |
פעיל |
צריך להגדיר את הערך true כדי לאכוף את המדיניות.
הגדרת הערך |
true | אופציונלי |
אסינכרוני | המאפיין הזה הוצא משימוש. | false | הוצא משימוש |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
מציינת את אלגוריתם הגיבוב (hash) שיחשב את ה-HMAC.
ברירת מחדל | לא רלוונטי |
נוכחות | חובה |
סוג | מחרוזת |
ערכים חוקיים | SHA-1 , SHA-224 , SHA-256 , SHA-384
SHA-512 , MD-5
הגדרת המדיניות מקבלת שמות של אלגוריתמים ללא הבחנה בין אותיות רישיות (case-sensitive), וגם
עם או בלי הקו המפריד בין האותיות למספרים . לדוגמה, |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
שימוש בנוסף למאפיין השם כדי להוסיף תווית למדיניות בעורך ה-Proxy של ממשק המשתמש של Apigee בשם אחר בשפה טבעית.
ברירת מחדל | אם משמיטים את הרכיב הזה, המערכת תשתמש בערך של מאפיין השם של המדיניות. |
נוכחות | אופציונלי |
סוג | מחרוזת |
<Message>
<Message>message_template_here</Message> or <Message ref='variable_here'/>
מציינת את המטען הייעודי (Payload) של ההודעה לחתימה. הקלט של הרכיב הזה תומך תבניות של הודעות (החלפת משתנה) כדי לאפשר הכללה של פריטים נוספים בזמן הריצה, כמו חותמות זמן, צפנים חד-פעמיים, רשימות של כותרות או מידע אחר. לדוגמה:
<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
כדי להתייחס לכל משתנה שלא ניתן לפתרון כמחרוזת ריקה
(null).
הערך הבוליאני 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 |
Error reference
This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Occurs when |
---|---|---|
steps.hmac.UnresolvedVariable |
401 | This error occurs if a variable specified in the HMAC policy is either:
|
steps.hmac.HmacVerificationFailed |
401 | The HMAC verification failed; the verification value provided does not match the calculated value. |
steps.hmac.HmacCalculationFailed |
401 | The policy was unable to calculate the HMAC. |
steps.hmac.EmptySecretKey |
401 | The value of the secret key variable is empty. |
steps.hmac.EmptyVerificationValue |
401 | The variable holding the verification value is empty. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | HTTP status | Occurs when |
---|---|---|
steps.hmac.MissingConfigurationElement |
401 | This error occurs when a required element or attribute is missing. |
steps.hmac.InvalidValueForElement |
401 | This error occurs if the value specified in the Algorithm element is not
one of the following values: SHA-1 , SHA-224 , SHA-256 ,
SHA-512 , or MD-5 . |
steps.hmac.InvalidSecretInConfig |
401 | This error occurs if there is a text value explicitly provided for SecretKey . |
steps.hmac.InvalidVariableName |
401 | This error occurs if the SecretKey variable does not contain the
private prefix (private. ). |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "UnresolvedVariable" |
hmac.policy_name.failed |
The policy sets this variable in the case of a failure. | hmac.HMAC-Policy.failed = true |
Example error response
For error handling, the best practice is to trap the errorcode
part of the error
response. Do not rely on the text in the faultstring
, because it could change.
Example fault rule
<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>