DecodeJWT नीति

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

यह क्या है

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

JWT डिकोड करने की नीति इस बात पर ध्यान दिए बिना काम करती है कि JWT को साइन करने के लिए किसी एल्गोरिदम का इस्तेमाल किया गया है या नहीं. ज़्यादा जानकारी के लिए, JWS और JWT की नीतियों की खास जानकारी देखें.

वीडियो

JWT डिकोड करने का तरीका जानने के लिए यह छोटा वीडियो देखें.

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

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

<DecodeJWT name="JWT-Decode-HS256">
    <DisplayName>JWT Verify HS256</DisplayName>
    <Source>var.jwt</Source>
</DecodeJWT>

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

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

नीति के संदर्भ में, Decode JWT नीति के एलिमेंट और एट्रिब्यूट के बारे में बताया जाता है.

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

<DecodeJWT name="JWT" 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>jwt-variable</Source>

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

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

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

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

jwt.{policy_name}.{variable_name}

उदाहरण के लिए, अगर नीति का नाम jwt-parse-token है, तो यह नीति JWT में बताए गए सब्जेक्ट को, jwt.jwt-parse-token.decoded.claim.sub नाम के कॉन्टेक्स्ट वैरिएबल में सेव करेगी. (पुराने सिस्टम के साथ काम करने की सुविधा के लिए, यह jwt.jwt-parse-token.claim.subject में भी उपलब्ध होगा)

वैरिएबल का नाम ब्यौरा
claim.audience JWT पर ऑडियंस का दावा. यह वैल्यू कोई स्ट्रिंग या स्ट्रिंग का कलेक्शन हो सकता है.
claim.expiry खत्म होने की तारीख/समय, जो epoch के बाद से मिलीसेकंड में दिखाया जाता है.
claim.issuedat टोकन जारी किए जाने की तारीख. इसे epoch के बाद के मिलीसेकंड में दिखाया जाता है.
claim.issuer JWT जारी करने वाले का दावा.
claim.notbefore अगर JWT में nbf दावा शामिल है, तो इस वैरिएबल में वह वैल्यू शामिल होगी जिसे epoch के बाद से मिलीसेकंड में दिखाया जाता है.
claim.subject JWT विषय दावा.
claim.name पेलोड में नाम वाले दावे (स्टैंडर्ड या अतिरिक्त) की वैल्यू. इनमें से एक वैल्यू, पेलोड में मौजूद हर दावे के लिए सेट की जाएगी.
decoded.claim.name पेलोड में नाम वाले दावे (स्टैंडर्ड या अतिरिक्त) की JSON-पार्स करने लायक वैल्यू. पेलोड में मौजूद हर दावे के लिए, एक वैरिएबल सेट किया जाता है. उदाहरण के लिए, JWT के जारी किए जाने के समय को वापस पाने के लिए, decoded.claim.iat का इस्तेमाल किया जा सकता है. यह Epoch के बाद के सेकंड में दिखाया जाता है. आपके पास claim.name फ़्लो वैरिएबल का इस्तेमाल करने का भी विकल्प है. हालांकि, किसी दावे को ऐक्सेस करने के लिए, इस वैरिएबल का इस्तेमाल करने का सुझाव दिया जाता है.
decoded.header.name पेलोड में मौजूद हेडर की JSON-पार्स हो सकने वाली वैल्यू. पेलोड में हर हेडर के लिए, एक वैरिएबल सेट किया जाता है. हालांकि, header.name फ़्लो वैरिएबल का इस्तेमाल भी किया जा सकता है, लेकिन हेडर को ऐक्सेस करने के लिए, इस वैरिएबल का इस्तेमाल करने का सुझाव दिया जाता है.
expiry_formatted ऐक्सेस खत्म होने की तारीख/समय, इस स्ट्रिंग का फ़ॉर्मैट ऐसा होना चाहिए जिसे कोई भी व्यक्ति आसानी से पढ़ सके. उदाहरण: 2017-09-28T21:30:45.000+0000
header.algorithm JWT पर इस्तेमाल किया जाने वाला साइनिंग एल्गोरिदम. उदाहरण के लिए, RS256, HS384 वगैरह. ज़्यादा जानकारी के लिए, (एल्गोरिदम) हेडर पैरामीटर देखें.
header.kid कुंजी आईडी, अगर JWT जनरेट करते समय जोड़ा गया हो. JWT की पुष्टि करने के लिए, JWT की नीतियों की खास जानकारी पर जाकर, "JSON Web Key सेट (JWKS) का इस्तेमाल करना" भी देखें. ज़्यादा जानकारी के लिए (कुंजी आईडी) हेडर पैरामीटर देखें.
header.type JWT पर सेट किया जाएगा.
header.name नाम वाले हेडर की वैल्यू (स्टैंडर्ड या अतिरिक्त). इनमें से एक वैल्यू को JWT के हेडर वाले हिस्से में मौजूद, हर अतिरिक्त हेडर के लिए सेट किया जाएगा.
header-json JSON फ़ॉर्मैट में हेडर.
is_expired सही या गलत
payload-claim-names JWT के साथ काम करने वाले दावों का कलेक्शन.
payload-json
JSON फ़ॉर्मैट में पेलोड.
seconds_remaining टोकन के खत्म होने से पहले के सेकंड. अगर टोकन की समयसीमा खत्म हो गई है, तो यह संख्या नेगेटिव हो जाएगी.
time_remaining_formatted टोकन की समयसीमा खत्म होने से पहले, बचे हुए समय को इस स्ट्रिंग के तौर पर फ़ॉर्मैट किया जाता है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. उदाहरण: 00:59:59.926
valid पुष्टि के लिए JWT के मामले में, सिग्नेचर की पुष्टि होने पर यह वैरिएबल 'सही' होगा. साथ ही, अगर टोकन की समयसीमा खत्म होने वाली है, तो मौजूदा समय 'सही' होगा. साथ ही, अगर टोकन की वैल्यू पहले की तरह मौजूद है, तो यह वैरिएबल 'सही' होगा. नहीं तो गलत है.

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

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

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

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

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

गड़बड़ी का कोड एचटीटीपी कोड स्थिति वजह समाधान
steps.jwt.FailedToDecode 401 ऐसा तब होता है, जब नीति, JWT को डिकोड नहीं कर पाती. JWT गलत हो सकता है, अमान्य हो सकता है या इसे डिकोड नहीं किया जा सकता.
steps.jwt.FailedToResolveVariable 401 ऐसा तब होता है, जब नीति के <Source> एलिमेंट में बताया गया फ़्लो वैरिएबल मौजूद न हो.
steps.jwt.InvalidToken 401 ऐसा तब होता है, जब नीति के <Source> एलिमेंट में दिया गया फ़्लो वैरिएबल दायरे से बाहर हो या उसे हल नहीं किया जा सकता हो.

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

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

गड़बड़ी का नाम वजह समाधान
InvalidEmptyElement ऐसा तब होता है, जब डिकोड किए जाने वाले JWT वाले फ़्लो वैरिएबल को नीति के <Source> एलिमेंट में न बताया गया हो.

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

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

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

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

JWT नीति के गड़बड़ी कोड

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

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

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