DecodeJWS नीति

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

यह क्या है

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

JWS में अटैच किया गया पेलोड हो सकता है, जैसा कि इस फ़ॉर्म में है:

header.payload.signature

इसके अलावा, JWS से मिलने वाले पेलोड को छोड़ा जा सकता है. इसे detached पेलोड कहा जाता है और यह इस तरह से हो सकता है:

header..signature

DecodeJWS नीति दोनों फ़ॉर्म के साथ काम करती है, क्योंकि यह सिर्फ़ JWS के हेडर वाले हिस्से को ही डिकोड करती है. DecodeJWS नीति JWS को साइन करने के लिए इस्तेमाल किए गए एल्गोरिदम पर ध्यान दिए बिना भी काम करती है.

ज़्यादा जानकारी और JWS के फ़ॉर्मैट की खास जानकारी के लिए, JWS और JWT की नीतियों की खास जानकारी देखें.

वीडियो

JWT डिकोड करने का तरीका जानने के लिए यह छोटा वीडियो देखें. यह वीडियो किसी JWT के लिए खास है, लेकिन JWS के लिए कई कॉन्सेप्ट एक जैसे हैं.

उदाहरण: JWS को डिकोड करना

नीचे दिखाई गई नीति, फ़्लो वैरिएबल var.JWS में मिलने वाले JWS को डिकोड करती है. यह वैरिएबल मौजूद होना चाहिए. साथ ही, इसमें एक चालू (डिकोड किया जा सकने वाला) JWS से कनेक्ट किया जाना चाहिए. यह नीति, किसी भी फ़्लो वैरिएबल से JWS हासिल कर सकती है.

<DecodeJWS name="JWS-Decode-HS256">
    <DisplayName>JWS Verify HS256</DisplayName>
    <Source>var.JWS</Source>
</DecodeJWS>

JWS के हेडर वाले हर हिस्से के लिए, नीति इस नाम वाला फ़्लो वैरिएबल सेट करती है:

jws.policy-name.header.header-name

अगर JWS में अटैच किया गया पेलोड है, तो यह jws.policy-name.header.payload फ़्लो वैरिएबल को पेलोड पर सेट करता है. डिटैच किए गए पेलोड के लिए, payload खाली है. इस नीति के ज़रिए सेट किए गए वैरिएबल की पूरी सूची के लिए फ़्लो वैरिएबल देखें.

JWS को डिकोड करने के लिए एलिमेंट का रेफ़रंस

नीति का रेफ़रंस, Decode JWS नीति के एलिमेंट और एट्रिब्यूट के बारे में बताता है.

टॉप-लेवल एलिमेंट पर लागू होने वाले एट्रिब्यूट

<DecodeJWS name="JWS" continueOnError="false" enabled="true" async="false">

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

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

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

लागू नहीं ज़रूरी है
continueOnError इस नीति को false पर सेट करें, ताकि नीति के काम न करने पर गड़बड़ी का मैसेज दिखे. ज़्यादातर नीतियों में, ऐसा आम तौर पर किया जाता है.

किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, true पर सेट करें.

false ज़रूरी नहीं
चालू किया गया नीति लागू करने के लिए, true पर सेट करें.

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

सही ज़रूरी नहीं
async यह एट्रिब्यूट अब काम नहीं करता. false बहिष्कृत

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

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

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

<सोर्स>

<Source>JWS-variable</Source>

अगर यह वैल्यू मौजूद होती है, तो उस फ़्लो वैरिएबल के बारे में बताता है जिसमें नीति को, JWS को डिकोड करने के लिए ढूंढना है.

डिफ़ॉल्ट request.header.authorization (डिफ़ॉल्ट के बारे में अहम जानकारी पाने के लिए, ऊपर दिया गया नोट देखें).
मौजूदगी ज़रूरी नहीं
स्ट्रीम किस तरह की है String
मान्य वैल्यू Edge फ़्लो वैरिएबल का नाम

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

सफलता मिलने पर, JWS की पुष्टि करें और JWS को डिकोड करें नीतियां, इस पैटर्न के मुताबिक कॉन्टेक्स्ट वैरिएबल को सेट करती हैं:

jws.{policy_name}.{variable_name}

उदाहरण के लिए, अगर नीति का नाम verify-jws है, तो नीति, JWS में बताए गए एल्गोरिदम को इस कॉन्टेक्स्ट वैरिएबल के लिए सेव करेगी: jws.verify-jws.header.algorithm

वैरिएबल का नाम ब्यौरा
decoded.header.name पेलोड में मौजूद हेडर की JSON-पार्स हो सकने वाली वैल्यू. पेलोड में हर हेडर के लिए, एक वैरिएबल सेट किया जाता है. हालांकि, header.name फ़्लो वैरिएबल का इस्तेमाल भी किया जा सकता है, लेकिन हेडर को ऐक्सेस करने के लिए, इस वैरिएबल का इस्तेमाल करने का सुझाव दिया जाता है.
header.algorithm JWS पर साइन इन करने के लिए इस्तेमाल किया जाने वाला एल्गोरिदम. उदाहरण के लिए, RS256, HS384 वगैरह. ज़्यादा जानकारी के लिए, (एल्गोरिदम) हेडर पैरामीटर देखें.
header.kid कुंजी आईडी, अगर JWS जनरेट करते समय जोड़ा गया था. JWS की पुष्टि करने के लिए, JWT और JWS की नीतियों की खास जानकारी पर जाकर, "JSON वेब पासकोड सेट (JWKS)" इस्तेमाल करें. ज़्यादा जानकारी के लिए (कुंजी आईडी) हेडर पैरामीटर देखें.
header.type हेडर टाइप की वैल्यू. ज़्यादा जानकारी के लिए (टाइप) हेडर पैरामीटर देखें.
header.name नाम वाले हेडर की वैल्यू (स्टैंडर्ड या अतिरिक्त). इनमें से एक वैल्यू को JWS के हेडर वाले हर अतिरिक्त हेडर के लिए सेट किया जाएगा.
header-json JSON फ़ॉर्मैट में हेडर.
payload अगर JWS में अटैच किया गया पेलोड है, तो JWS पेलोड. डिटैच किए गए पेलोड के लिए, यह वैरिएबल खाली है.
valid VerificationJWS के मामले में, सिग्नेचर की पुष्टि होने पर यह वैरिएबल 'सही' होगा. साथ ही, अगर मौजूदा समय टोकन की समयसीमा खत्म होने से पहले का होगा, तो मौजूदा समय, तब सही होगा, जब टोकन की वैल्यू पहले मौजूद हो. नहीं तो गलत है.

DecodeJWS के मामले में, यह वैरिएबल सेट नहीं है.

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

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

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

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

गड़बड़ी का कोड एचटीटीपी कोड स्थिति कब होता है
steps.jws.FailedToDecode 401 यह नीति, JWS को डिकोड नहीं कर सकी. शायद JWS में कोई गड़बड़ी है.
steps.jws.FailedToResolveVariable 401 ऐसा तब होता है, जब नीति के <Source> एलिमेंट में बताया गया फ़्लो वैरिएबल मौजूद न हो.
steps.jws.InvalidClaim 401 ऐसा दावा जो मौजूद नहीं है या दावे से मेल नहीं खाता, या हेडर या हेडर मेल नहीं खाता.
steps.jws.InvalidJsonFormat 401 JWS हेडर में अमान्य JSON मिला.
steps.jws.InvalidJws 401 यह गड़बड़ी तब होती है, जब JWS हस्ताक्षर की पुष्टि नहीं हो पाती.
steps.jws.InvalidPayload 401 JWS पेलोड अमान्य है.
steps.jws.InvalidSignature 401 <DetachedContent> को हटाया गया है और JWS में अलग कॉन्टेंट पेलोड है.
steps.jws.MissingPayload 401 JWS पेलोड मौजूद नहीं है.
steps.jws.NoAlgorithmFoundInHeader 401 ऐसा तब होता है, जब JWS इस एल्गोरिदम हेडर को छोड़ देता है.
steps.jws.UnknownException 401 एक अज्ञात अपवाद हुआ.

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

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

गड़बड़ी का नाम कब होता है
InvalidAlgorithm सिर्फ़ ये वैल्यू मान्य हैं: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512.

EmptyElementForKeyConfiguration

FailedToResolveVariable

InvalidConfigurationForActionAndAlgorithmFamily

InvalidConfigurationForVerify

InvalidEmptyElement

InvalidFamiliesForAlgorithm

InvalidKeyConfiguration

InvalidNameForAdditionalClaim

InvalidNameForAdditionalHeader

InvalidPublicKeyId

InvalidPublicKeyValue

InvalidSecretInConfig

InvalidTypeForAdditionalClaim

InvalidTypeForAdditionalHeader

InvalidValueForElement

InvalidValueOfArrayAttribute

InvalidVariableNameForSecret

MissingConfigurationElement

MissingElementForKeyConfiguration

MissingNameForAdditionalClaim

MissingNameForAdditionalHeader

डिप्लॉयमेंट की दूसरी संभावित गड़बड़ियां.

गड़बड़ी वाले वैरिएबल

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

वैरिएबल जगह उदाहरण
fault.name="fault_name" fault_name, गड़बड़ी का नाम है, जैसा कि ऊपर रनटाइम की गड़बड़ियां टेबल में दिया गया है. गड़बड़ी का नाम, गड़बड़ी के कोड का आखिरी हिस्सा होता है. fault.name Matches "TokenExpired"
JWS.failed सफल न होने पर, JWS नीतियां एक ही वैरिएबल सेट करती हैं. jws.JWS-Policy.failed = true

गड़बड़ी के जवाब का उदाहरण

गड़बड़ी को ठीक करने के लिए, सबसे सही तरीका यह है कि आप गड़बड़ी के रिस्पॉन्स के errorcode वाले हिस्से को फंसा दें. faultstring के टेक्स्ट पर भरोसा न करें, क्योंकि यह बदल सकता है.

गड़बड़ी के नियम का उदाहरण

<FaultRules>
    <FaultRule name="JWS Policy Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "TokenExpired")</Condition>
        </Step>
        <Condition>JWS.failed=true</Condition>
    </FaultRule>
</FaultRules>