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 मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) अतिरिक्त पाबंदियां लागू करता है. जैसे, उन वर्णों को अपने-आप हटाना जो अक्षर और अंक नहीं हैं.
इसके अलावा, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में नीति को आम भाषा में अलग नाम से लेबल करने के लिए, |
लागू नहीं | ज़रूरी है |
continueOnError |
इस नीति को false पर सेट करें, ताकि नीति के काम न करने पर गड़बड़ी का मैसेज दिखे. ज़्यादातर नीतियों में, ऐसा आम तौर पर किया जाता है.
किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, |
false | ज़रूरी नहीं |
चालू किया गया |
नीति लागू करने के लिए, true पर सेट करें.
नीति को "बंद" करने के लिए, |
सही | ज़रूरी नहीं |
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 गलत हो सकता है, अमान्य हो सकता है या इसे डिकोड नहीं किया जा सकता. | build |
steps.jwt.FailedToResolveVariable |
401 | ऐसा तब होता है, जब नीति के <Source> एलिमेंट में बताया गया फ़्लो वैरिएबल
मौजूद न हो. |
|
steps.jwt.InvalidToken |
401 | ऐसा तब होता है, जब नीति के <Source> एलिमेंट में दिया गया फ़्लो वैरिएबल
दायरे से बाहर हो या उसे हल नहीं किया जा सकता हो. |
build |
डिप्लॉयमेंट से जुड़ी गड़बड़ियां
ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाले किसी प्रॉक्सी को डिप्लॉय किया जाता है.
गड़बड़ी का नाम | वजह | समाधान |
---|---|---|
InvalidEmptyElement |
ऐसा तब होता है, जब डिकोड किए जाने वाले JWT वाले फ़्लो वैरिएबल को
नीति के <Source> एलिमेंट में न बताया गया हो.
|
build |
गड़बड़ी वाले वैरिएबल
रनटाइम में कोई गड़बड़ी होने पर ये वैरिएबल सेट किए जाते हैं. ज़्यादा जानकारी के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी देखें.
वैरिएबल | जगह | उदाहरण |
---|---|---|
fault.name="fault_name" |
fault_name, गड़बड़ी का नाम है, जैसा कि ऊपर रनटाइम की गड़बड़ियां टेबल में दिया गया है. गड़बड़ी का नाम, गड़बड़ी के कोड का आखिरी हिस्सा होता है. | fault.name Matches "TokenExpired" |
JWT.failed |
सफल न होने पर, JWT की सभी नीतियों के लिए एक जैसा वैरिएबल सेट किया जाता है. | JWT.failed = true |
गड़बड़ी के जवाब का उदाहरण
गड़बड़ी को ठीक करने के लिए, सबसे सही तरीका यह है कि आप गड़बड़ी के रिस्पॉन्स के 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>