JWT रनटाइम की गड़बड़ी से जुड़ी समस्या हल करना

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

FailedToDecode

गड़बड़ी का कोड

steps.jwt.FailedToDecode

गड़बड़ी के जवाब का मुख्य हिस्सा

{
  "fault": {
    "faultstring": "Failed to Decode Token: policy({0})",
    "detail": {
       "errorcode": "steps.jwt.FailedToDecode"
     }
  }
}

वजह

यह गड़बड़ी तब होती है, जब Decode JWT की नीति के <Source> एलिमेंट में दिया गया JSON वेब टोकन (JWT) गलत हो, अमान्य हो या इसे डिकोड न किया जा सके.

सही तरीके से स्ट्रक्चर किए गए JWT में हेडर, पेलोड, और सिग्नेचर इस फ़ॉर्मैट में होने चाहिए: header.payload.signature. अगर DecodeJWT नीति को पास किया गया JWT का कोई कॉम्पोनेंट मौजूद नहीं है, तो आपको गड़बड़ी का मैसेज मिलेगा. उदाहरण के लिए, अगर JWT में सिर्फ़ payload.signature है, लेकिन उसका header मौजूद नहीं है, तो गड़बड़ी दिखेगी.

संक्रमण की जांच

  1. Decode JWT नीति के <Source> एलिमेंट में बताए गए वैरिएबल की पहचान करें. इस वैरिएबल में JWT शामिल होना चाहिए.

    यहां JWT की डिकोड करने की नीति का सैंपल दिया गया है:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    ऊपर दिए गए उदाहरण में, JWT को 'ऑथराइज़ेशन अनुरोध' के हेडर में शामिल किया जाना चाहिए.

  2. पहले चरण में पहचाने गए वैरिएबल की जांच करें और देखें कि इसमें मौजूद 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 है. इस वजह से, Decode JWT नीति इस गड़बड़ी के साथ काम नहीं करती :

    "faultstring": "Failed to Decode Token: policy({0})"
    

रिज़ॉल्यूशन

पक्का करें कि डिकोड की गई जेडब्लयूटी नीति को पास किए गए 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"
     }
  }
}

वजह

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

  • दायरे से बाहर है (यह उस फ़्लो में उपलब्ध नहीं होता जहां नीति का इस्तेमाल किया जा रहा है) या
  • रिज़ॉल्व नहीं किया जा सकता (तय नहीं किया गया है)

संक्रमण की जांच

  1. Decode JWT नीति के <Source> एलिमेंट में बताए गए वैरिएबल की पहचान करें. इस वैरिएबल में JWT शामिल होना चाहिए.

    यहां JWT की डिकोड करने की नीति का सैंपल दिया गया है:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    ऊपर दिए गए उदाहरण में, अनुमति देने के अनुरोध के हेडर में JWT शामिल होना चाहिए.

  2. तय करें कि क्या चरण 1 में तय किया गया वैरिएबल तय किया गया है और उस फ़्लो में उपलब्ध है जिसमें Decode JWT नीति लागू की जाती है.

  3. अगर वैरिएबल इनमें से कोई एक है:

    • दायरे से बाहर है (यह उस फ़्लो में उपलब्ध नहीं होता जहां नीति का इस्तेमाल किया जा रहा है) या
    • रिज़ॉल्व नहीं किया जा सकता (तय नहीं किया गया है)

    तो यही गड़बड़ी की वजह है.

    नीचे उदाहरण के तौर पर दिए गए एपीआई अनुरोध में, उपयोगकर्ता ने अनुमति देने के अनुरोध के हेडर में JWT पास नहीं किया.

    curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
    

    अनुमति के अनुरोध वाला हेडर पास नहीं होने की वजह से, Decode JWT नीति इस गड़बड़ी की वजह से फ़ेल हो जाती है:

    "faultstring": "Invalid token: policy({0})"
    

रिज़ॉल्यूशन

पक्का करें कि डिकोड की गई JWT नीति के <Source> एलिमेंट में रेफ़र किया गया वैरिएबल तय किया गया है और इसमें एक मान्य (डिकोड किया जा सकने वाला) JWT मौजूद है. साथ ही, यह उस फ़्लो में उपलब्ध है जहां Decode JWT नीति लागू की जा रही है.

ऊपर दिखाए गए उदाहरण को ठीक करने के लिए, आपके पास अनुरोध की अनुमति देने वाले हेडर में एक मान्य JWT पास करने का विकल्प है. cURL कमांड का इस्तेमाल करके, एपीआई कॉल करके ऐसा किया जा सकता है:

curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"