आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
यह हैश पर आधारित मैसेज ऑथेंटिकेशन कोड (एचएमएसी) की गणना करता है और उसकी पुष्टि करता है. कभी-कभी इसे कीड मैसेज ऑथेंटिकेशन कोड या कीड हैश भी कहा जाता है. एचएमएसी, क्रिप्टोग्राफ़िक हैश फ़ंक्शन का इस्तेमाल करता है. जैसे, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 या MD-5. इसे "मैसेज" पर लागू किया जाता है. साथ ही, एक सीक्रेट कुंजी का इस्तेमाल करके, उस मैसेज पर हस्ताक्षर या मैसेज ऑथेंटिकेशन कोड जनरेट किया जाता है. यहां "मैसेज" का मतलब, बाइट की किसी भी स्ट्रीम से है. मैसेज भेजने वाला व्यक्ति, मैसेज पाने वाले व्यक्ति को एचएमएसी भी भेज सकता है. मैसेज पाने वाला व्यक्ति, मैसेज की पुष्टि करने के लिए एचएमएसी का इस्तेमाल कर सकता है.
एचएमएसी के बारे में ज़्यादा जानने के लिए, 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 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>
हस्ताक्षर की गणना और उस हस्ताक्षर की पुष्टि करने की प्रोसेस एक जैसी होती है. एचएमएसी नीति, एचएमएसी की गणना करती है. साथ ही, यह गणना किए गए हस्ताक्षर की पुष्टि, अनुमानित वैल्यू के हिसाब से कर सकती है. हालांकि, ऐसा करना ज़रूरी नहीं है. VerificationValue एलिमेंट (अगर मौजूद है) नीति को यह निर्देश देता है कि वह कैलकुलेट की गई वैल्यू की तुलना, जानी-पहचानी या दी गई वैल्यू से करे.
एचएमएसी के लिए एलिमेंट रेफ़रंस
नीति के रेफ़रंस में, एचएमएसी नीति के एलिमेंट और एट्रिब्यूट के बारे में बताया गया है.
ऐसे एट्रिब्यूट जो टॉप-लेवल एलिमेंट पर लागू होते हैं
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
नीति के सभी पैरंट एलिमेंट में ये एट्रिब्यूट एक जैसे होते हैं.
| एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | उपलब्धता |
|---|---|---|---|
| नाम |
नीति का इंटरनल नाम. नाम में सिर्फ़ इन वर्णों का इस्तेमाल किया जा सकता है:
A-Z0-9._\-$ %. हालांकि, Apigee के यूज़र इंटरफ़ेस (यूआई) में कुछ और पाबंदियां लागू होती हैं. जैसे, अक्षरों और अंकों के अलावा अन्य वर्णों को अपने-आप हटा दिया जाता है.
इसके अलावा, |
लागू नहीं | ज़रूरी है |
| continueOnError |
नीति के उल्लंघन की वजह से गड़बड़ी होने पर, इसे false पर सेट करें. ज़्यादातर नीतियों के लिए, ऐसा होना आम बात है.
इस विकल्प को |
गलत | वैकल्पिक |
| चालू किया गया |
नीति लागू करने के लिए, इसे true पर सेट करें.
नीति को "बंद करें" के लिए, |
सही | वैकल्पिक |
| एक साथ काम नहीं करने वाली प्रोसेस | यह एट्रिब्यूट अब काम नहीं करता. | गलत | बहिष्कृत |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
इससे एचएमएसी का हिसाब लगाने के लिए, हैश एल्गोरिदम के बारे में पता चलता है.
| डिफ़ॉल्ट | लागू नहीं |
| उपलब्धता | ज़रूरी है |
| समस्या | स्ट्रिंग |
| मान्य वैल्यू | 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.POLICYNAME.output को base64-encoded वैल्यू के साथ सेट करती है. |
| समस्या | स्ट्रिंग |
| मान्य वैल्यू | एन्कोडिंग के लिए, वैल्यू केस-इनसेंसिटिव होती हैं.
|
<SecretKey>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
एचएमएसी का हिसाब लगाने के लिए इस्तेमाल की गई सीक्रेट कुंजी के बारे में बताता है. कुंजी को रेफ़र किए गए वैरिएबल से हासिल किया जाता है. इसे खास एन्कोडिंग के हिसाब से डिकोड किया जाता है.
| डिफ़ॉल्ट |
रेफ़र किए गए वैरिएबल के लिए कोई डिफ़ॉल्ट वैल्यू नहीं है;
|
| उपलब्धता | ज़रूरी है |
| समस्या | स्ट्रिंग |
| मान्य वैल्यू |
encoding एट्रिब्यूट का इस्तेमाल करके, ऐसी कुंजी तय की जा सकती है जिसमें 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-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>