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

गड़बड़ी का रेफ़रंस

इस सेक्शन में, गड़बड़ी के कोड और दिखाए गए गड़बड़ी के मैसेज के बारे में बताया गया है. साथ ही, इस नीति से किसी गड़बड़ी को ट्रिगर करने पर Apigee की ओर से सेट किए गए, गड़बड़ी के वैरिएबल के बारे में बताया गया है. यह जानकारी जानना ज़रूरी है कि क्या गड़बड़ियों को ठीक करने के लिए, गड़बड़ी से जुड़े नियम बनाए जा रहे हैं. ज़्यादा जानने के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी और गड़बड़ियों को ठीक करने के तरीके देखें.

रनटाइम से जुड़ी गड़बड़ियां

नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.

गड़बड़ी का कोड एचटीटीपी कोड स्थिति कब होता है
steps.hmac.UnresolvedVariable 401

यह गड़बड़ी तब होती है, जब एचएमएसी नीति में बताया गया कोई वैरिएबल:

  • दायरे से बाहर है (यह सुविधा उस फ़्लो में उपलब्ध नहीं होती जहां नीति लागू की जा रही है)

    या

  • रिज़ॉल्व नहीं किया जा सकता (तय नहीं किया गया है)
steps.hmac.HmacVerificationFailed 401 एचएमएसी पुष्टि नहीं हो सकी; पुष्टि करने के लिए दिया गया मान, दिए गए मान से मेल नहीं खाता है.
steps.hmac.HmacCalculationFailed 401 नीति एचएमएसी की गिनती नहीं कर सकी.
steps.hmac.EmptySecretKey 401 सीक्रेट कुंजी वैरिएबल की वैल्यू खाली है.
steps.hmac.EmptyVerificationValue 401 पुष्टि करने की वैल्यू रखने वाला वैरिएबल खाली है.

डिप्लॉयमेंट से जुड़ी गड़बड़ियां

ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाले किसी प्रॉक्सी को डिप्लॉय किया जाता है.

गड़बड़ी का नाम एचटीटीपी कोड स्थिति कब होता है
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 गड़बड़ी का नाम है, जैसा कि रनटाइम की गड़बड़ियों की टेबल ऊपर दी गई है. गड़बड़ी का नाम आखिरी है का हिस्सा है. 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>