HMAC नीति

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

हैश पर आधारित मैसेज ऑथेंटिकेशन कोड (HMAC) की गिनती करता है और उसकी पुष्टि करता है. कभी-कभी इसे कीड मैसेज ऑथेंटिकेशन कोड या कीड हैश के नाम से जाना जाता है. एचएमएसी एक क्रिप्टोग्राफ़िक हैश का इस्तेमाल करता है SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 या MD-5 जैसे फ़ंक्शन, किसी "मैसेज" पर लागू होते हैं, और साथ में सुरक्षा कुंजी भी हो सकती है. का इस्तेमाल करें. "मैसेज" शब्द यहां जाएं का मतलब बाइट की किसी भी स्ट्रीम से है. मैसेज भेजने वाला, पाने वाले को एचएमएसी भी भेज सकता है. और मैसेज को प्रमाणित करने के लिए वह एचएमएसी का इस्तेमाल कर सकता है.

एचएमएसी के बारे में ज़्यादा जानने के लिए, HMAC: कीड-हैशिंग देखें के लिए, Message Authentication (rfc2104) के लिए.

सैंपल

एचएमएसी जनरेट करें

<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 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 name="HMAC" continueOnError="false" enabled="true" async="false">

ये एट्रिब्यूट, नीति के सभी पैरंट एलिमेंट में एक जैसे होते हैं.

एट्रिब्यूट जानकारी डिफ़ॉल्ट मौजूदगी
नाम नीति का अंदरूनी नाम. नाम में इस्तेमाल किए जा सकने वाले वर्ण इन तक सीमित हैं: A-Z0-9._\-$ %. हालांकि, Apigee यूज़र इंटरफ़ेस (यूआई) की ओर से पाबंदियां, जैसे कि अक्षर और अंक के अलावा किसी और वर्ण को अपने-आप हटाना.

विकल्प के तौर पर, <displayname></displayname> एलिमेंट का इस्तेमाल करके Apigee यूज़र इंटरफ़ेस (यूआई) के प्रॉक्सी एडिटर में, नीति को अलग और नैचुरल लैंग्वेज के साथ लेबल करें नाम.

लागू नहीं ज़रूरी है
continueOnError किसी नीति के काम न करने पर, गड़बड़ी दिखाने के लिए false पर सेट करें. यह उम्मीद है व्यवहार की जानकारी देने वाला डेटा.

नीति के लागू होने के बाद भी फ़्लो को एक्ज़ीक्यूट करने के लिए, इसे true पर सेट करें विफल होता है.

गलत वैकल्पिक
चालू किया गया नीति को लागू करने के लिए, true पर सेट करें.

false को "बंद करें" पर सेट करें नीति के बारे में ज़्यादा जानें. नीति लागू नहीं की जाएगी भले ही वह किसी फ़्लो से जुड़ा हुआ हो.

सही वैकल्पिक
एक साथ काम नहीं करने वाली प्रोसेस यह एट्रिब्यूट अब काम नहीं करता. गलत बहिष्कृत

&lt;Algorithm&gt;

<Algorithm>algorithm-name</Algorithm>

एचएमएसी का हिसाब लगाने के लिए हैश एल्गोरिदम तय करता है.

डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी है
स्ट्रीम किस तरह की है स्ट्रिंग
मान्य वैल्यू SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, और MD-5

इस नीति के कॉन्फ़िगरेशन में, केस में अंतर किए बिना एल्गोरिदम के नाम स्वीकार किए जाते हैं. अक्षरों और संख्याओं के बीच में डैश के साथ या इसके बिना डैश लगाएं . उदाहरण के लिए, SHA256, SHA-256, और sha256 एक समान हैं.

&lt;DisplayName&gt;

<DisplayName>Policy Display Name</DisplayName>

Apigee यूज़र इंटरफ़ेस (यूआई) के प्रॉक्सी एडिटर में नीति को लेबल करने के लिए, नाम एट्रिब्यूट के अलावा इसका इस्तेमाल करें पर क्लिक करें.

डिफ़ॉल्ट अगर इस एलिमेंट को छोड़ा जाता है, तो नीति के नाम वाले एट्रिब्यूट की वैल्यू का इस्तेमाल किया जाता है.
मौजूदगी वैकल्पिक
स्ट्रीम किस तरह की है स्ट्रिंग

&lt;Message&gt;

<Message>message_template_here</Message>
or
<Message ref='variable_here'/>

साइन करने के लिए मैसेज पेलोड के बारे में बताता है. इस एलिमेंट का इनपुट, मैसेज के टेंप्लेट (वैरिएबल प्रतिस्थापन) रनटाइम के दौरान अतिरिक्त आइटम शामिल करने की अनुमति देने के लिए, जैसे कि टाइमस्टैंप, नॉन्स, हेडर या अन्य जानकारी. उदाहरण के लिए:

<Message>Fixed Part
    {a_variable}
    {timeFormatUTCMs(timeFormatString1,system.timestamp)}
    {nonce}
</Message>

मैसेज टेंप्लेट में, तय किए गए और वैरिएबल वाले हिस्से शामिल हो सकते हैं. इनमें नई लाइनें और स्टैटिक फ़ंक्शन शामिल हैं. व्हाइटस्पेस अहम है.

डिफ़ॉल्ट लागू नहीं
मौजूदगी ज़रूरी है
स्ट्रीम किस तरह की है स्ट्रिंग
मान्य वैल्यू टेक्स्ट वैल्यू के लिए कोई भी स्ट्रिंग मान्य होती है. अगर ref एट्रिब्यूट दिया जाता है, तो तो उसे टेक्स्ट वैल्यू के मुकाबले प्राथमिकता दी जाएगी. यह नीति, टेक्स्ट का आकलन करती है वैल्यू या रेफ़र किए गए वैरिएबल को मैसेज टेंप्लेट के तौर पर सेट करें.

&lt;Output&gt;

<Output encoding='encoding_name'>variable_name</Output>

उस वैरिएबल का नाम बताता है जिसे नीति को कंप्यूट किए गए एचएमएसी वैल्यू के साथ सेट करना चाहिए. आउटपुट में इस्तेमाल करने के लिए, कोड में बदलने का तरीका भी तय करता है.

डिफ़ॉल्ट

डिफ़ॉल्ट आउटपुट वैरिएबल hmac.POLICYNAME.output है.

encoding एट्रिब्यूट की डिफ़ॉल्ट वैल्यू base64 है.

मौजूदगी ज़रूरी नहीं. अगर यह एलिमेंट मौजूद नहीं है, तो नीति फ़्लो वैरिएबल सेट करती है hmac.POLICYNAME.output, जिसमें base64 कोड में बदली गई वैल्यू है.
स्ट्रीम किस तरह की है स्ट्रिंग
मान्य वैल्यू

कोड में बदलने के लिए, hex, base16, base64, base64url.

वैल्यू, केस-इनसेंसिटिव होती हैं; hex और base16 समानार्थी शब्द हैं.

Output एलिमेंट की टेक्स्ट वैल्यू कोई भी मान्य फ़्लो वैरिएबल नाम हो सकता है.

&lt;SecretKey&gt;

<SecretKey encoding='encoding_name' ref='private.secretkey'/>

एचएमएसी को कंप्यूट करने के लिए इस्तेमाल की जाने वाली सीक्रेट कुंजी के बारे में बताता है. कुंजी को रेफ़र किए गए रेफ़रंस से लिया गया है वैरिएबल को खास एन्कोडिंग के मुताबिक डिकोड किया जाता है.

डिफ़ॉल्ट

रेफ़र किए गए वैरिएबल के लिए कोई डिफ़ॉल्ट वैल्यू नहीं है; 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 का परिणाम बाइट का एक सेट भी हो सकता है.

&lt;VerificationValue&gt;

<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 एलिमेंट के लिए किया जाता है.

&lt;IgnoreUnresolvedVariables&gt;

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

अगर आपको यह तय करना है कि किसी रेफ़र किए गए वैरिएबल के बताए जाने पर, नीति गड़बड़ी की सूचना दे, तो false पर सेट करें हल नहीं किया जा सकता. किसी ऐसे वैरिएबल को खाली स्ट्रिंग के तौर पर ट्रीट करने के लिए true पर सेट करें जिसे रिज़ॉल्व नहीं किया जा सकता (शून्य).

ignoreUnsolvedVariables बूलियन सिर्फ़ उन वैरिएबल पर असर डालता है जो मैसेज टेंप्लेट के तौर पर चला जाता है. हालांकि, SecretKey और VerificationValue किसी वैरिएबल का रेफ़रंस दे सकते हैं, दोनों उनमें से जिन्हें रिज़ॉल्व किया जा सकता हो, इसलिए ignore सेटिंग उन पर लागू नहीं होती.

डिफ़ॉल्ट गलत
मौजूदगी वैकल्पिक
स्ट्रीम किस तरह की है बूलियन
मान्य वैल्यू सही या गलत

फ़्लो वैरिएबल

एक्ज़ीक्यूशन के दौरान, नीति इन वैरिएबल को सेट कर सकती है.

वैरिएबल ब्यौरा उदाहरण
hmac.policy_name.message नीति इस वैरिएबल को असरदार मैसेज के साथ सेट करती है, Message में तय किए गए मैसेज टेंप्लेट के आकलन का नतीजा एलिमेंट. hmac.HMAC-Policy.message = "Hello, World"
hmac.policy_name.output इसका नतीजा मिलता है एचएमएसी कंप्यूटेशन, जब 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:

  • Out of scope (not available in the specific flow where the policy is being executed)

    or

  • Can't be resolved (is not defined)
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>