आपको Apigee Edge दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
FailedToDecode
गड़बड़ी का कोड
steps.jwt.FailedToDecode
गड़बड़ी का जवाब
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
वजह
यह गड़बड़ी तब होती है, जब JWT को डिकोड करने की नीति के <Source>
एलिमेंट में दिया गया JSON वेब टोकन (JWT) गलत फ़ॉर्मैट में हो, अमान्य हो या उसे डिकोड न किया जा सके.
सही तरीके से स्ट्रक्चर्ड JWT में, हेडर, पेलोड, और हस्ताक्षर इस फ़ॉर्मैट में होने चाहिए: header.payload.signature
. अगर DecodeJWT नीति में पास किए गए JWT में कोई कॉम्पोनेंट हिस्सा मौजूद नहीं है, तो आपको गड़बड़ी का मैसेज मिलेगा. उदाहरण के लिए, अगर JWT में सिर्फ़ payload.signature
है, लेकिन उसका header
मौजूद नहीं है, तो गड़बड़ी होगी.
संक्रमण की जांच
JWT डिकोड करने की नीति के
<Source>
एलिमेंट में बताए गए वैरिएबल की पहचान करें. इस वैरिएबल में JWT होना चाहिए.यहां डिकोड की JWT नीति का सैंपल दिया गया है:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
ऊपर दिए गए उदाहरण में, अनुमति के अनुरोध वाले हेडर में JWT शामिल होना चाहिए.
पहले चरण में पहचाने गए वैरिएबल की जांच करें और देखें कि उसमें मौजूद JWT मान्य है या नहीं. अगर इनपुट JWT मान्य नहीं है, तो गड़बड़ी की यही वजह है.
नीचे दिए गए एपीआई अनुरोध के उदाहरण में, इनपुट JWT को ऑथराइज़ेशन रिक्वेस्ट हेडर में पास किया गया है:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
JWT की बारीकी से जांच करने पर पता चलता है कि इसका फ़ॉर्मैट
payload.signature
है, जो अमान्य है. JWT का सही फ़ॉर्मैटheader.payload.signature
होना चाहिए. इस वजह से, JWT को डिकोड करने की नीति काम नहीं करती और गड़बड़ी का यह मैसेज दिखता है :"faultstring": "Failed to Decode Token: policy({0})"
रिज़ॉल्यूशन
पक्का करें कि JWT को डिकोड करने की नीति में दिए गए JWT में तीनों एलिमेंट मौजूद हों, वह सही फ़ॉर्मैट में हो, और उसे डिकोड किया जा सके.
ऊपर दिए गए उदाहरण को ठीक करने के लिए, header.payload.signature
फ़ॉर्मैट में मान्य JWT पास किया जा सकता है. ऐसा करने के लिए, cURL कमांड का इस्तेमाल करके एपीआई कॉल करें. इसके लिए, यह तरीका अपनाएं:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
गड़बड़ी का कोड
steps.jwt.InvalidToken
गड़बड़ी का जवाब
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
वजह
यह गड़बड़ी तब होती है, जब JWT को डिकोड करने की नीति के <Source>
एलिमेंट में बताया गया फ़्लो वैरिएबल:
- दायरे से बाहर है (जिस फ़्लो में नीति लागू की जा रही है उसमें उपलब्ध नहीं है) या
- रिज़ॉल्व नहीं किया जा सकता (इसकी परिभाषा नहीं दी गई है)
संक्रमण की जांच
JWT डिकोड करने की नीति के
<Source>
एलिमेंट में बताए गए वैरिएबल की पहचान करें. इस वैरिएबल में JWT होना चाहिए.यहां JWT को डिकोड करने की नीति का एक सैंपल दिया गया है:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
ऊपर दिए गए उदाहरण में, अनुमति के अनुरोध वाले हेडर में JWT शामिल होना चाहिए.
यह पता लगाएं कि पहले चरण में पहचाने गए वैरिएबल को तय किया गया है या नहीं. साथ ही, यह भी पता लगाएं कि वह उस फ़्लो में उपलब्ध है या नहीं जिसमें JWT डिकोड करने की नीति लागू की गई है.
अगर वैरिएबल:
- दायरे से बाहर है (उस खास फ़्लो में उपलब्ध नहीं है जहां नीति लागू की जा रही है) या
- हल नहीं किया जा सकता (तय नहीं है)
तो गड़बड़ी की वजह यही है.
नीचे दिए गए एपीआई अनुरोध के उदाहरण में, उपयोगकर्ता ने अनुमति के अनुरोध वाले हेडर में JWT पास नहीं किया है.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
अनुमति के अनुरोध का हेडर पास नहीं होने की वजह से, JWT को डिकोड करने की नीति काम नहीं करती और गड़बड़ी का यह मैसेज दिखता है:
"faultstring": "Invalid token: policy({0})"
रिज़ॉल्यूशन
पक्का करें कि JWT को डिकोड करने की नीति के <Source>
एलिमेंट में रेफ़रंस किया गया वैरिएबल तय किया गया हो. साथ ही, उसमें मान्य (डिकोड किया जा सकने वाला) JWT हो और वह उस फ़्लो में उपलब्ध हो जहां JWT को डिकोड करने की नीति लागू की जा रही है.
ऊपर दिए गए उदाहरण को ठीक करने के लिए, अनुरोध की अनुमति वाले हेडर में मान्य जेडब्लयूटी पास किया जा सकता है. ऐसा करने के लिए, cURL कमांड का इस्तेमाल करके एपीआई कॉल करें. इसके लिए, यह तरीका अपनाएं:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"