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

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

पर क्लिक करें.

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 को Authorization अनुरोध के हेडर में शामिल किया जाना चाहिए.

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

    यहां दिए गए एपीआई अनुरोध के उदाहरण में, इनपुट JWT को Authorization अनुरोध हेडर में पास किया गया है:

    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})"
    

रिज़ॉल्यूशन

पक्का करें कि Decode 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"
     }
  }
}

वजह

यह गड़बड़ी तब होती है, जब 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. यह तय करें कि पहले चरण में पहचाना गया वैरिएबल, उस फ़्लो में तय किया गया है और उपलब्ध है जिसमें Decode JWT नीति लागू की गई है.

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

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

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

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

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

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

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

रिज़ॉल्यूशन

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

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

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