पुष्टि करने की सामान्य नीति के दौरान, रनटाइम में गड़बड़ी की समस्या हल करना

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

UnresolvedVariable

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

steps.basicauthentication.UnresolvedVariable

गड़बड़ी का जवाब

{
    "fault": {
        "faultstring": "Unresolved variable : [variable_name]",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

गड़बड़ी के मैसेज का उदाहरण

{
    "fault": {
        "faultstring": "Unresolved variable : request.header.Authorization",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब BasicAuthentication नीति के <Source> एलिमेंट में बताई गई Base64 कोड में बदली गई स्ट्रिंग वाला वैरिएबल, इनमें से कोई एक हो:

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

उदाहरण के लिए, यह गड़बड़ी तब होती है, जब BasicAuthentication नीति में<Source> एलिमेंट मेंrequest.header.Authorization के तौर पर कोई वैरिएबल तय किया गया हो, लेकिन एपीआई अनुरोध के हिस्से के तौर पर Authorization हेडर पास न किया गया हो.

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

  1. BasicAuthentication नीति में <Source> एलिमेंट के लिए इस्तेमाल किए गए वैरिएबल की पहचान करें. आपको यह जानकारी, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकती है. उदाहरण के लिए, यहां दिए गए faultstring, में, <Source> एलिमेंट के लिए इस्तेमाल किया गया वैरिएबल request.header.Authorization है:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. खास एपीआई प्रॉक्सी में, BasicAuthentication की सभी नीतियों की जांच करें और पता लगाएं कि गड़बड़ी हुई है या नहीं. BasicAuthentication की एक या उससे ज़्यादा नीतियां हो सकती हैं. BasicAuthentication की उस नीति या नीतियों की पहचान करें जिनमें <Source> एलिमेंट में बताए गए वैरिएबल का नाम, गड़बड़ी की स्ट्रिंग (ऊपर दिया गया पहला चरण) में बताए गए वैरिएबल के नाम से मेल खाता हो.

    उदाहरण के लिए, नीचे दी गई नीति, <Source> एलिमेंट को request.header.Authorization नाम के वैरिएबल पर सेट करती है. यह वैरिएबल, faultstring में मौजूद वैरिएबल से मेल खाता है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
      <DisplayName>Decode Basic Authentication Header</DisplayName>
      <Operation>Decode</Operation>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <User ref="request.header.username"/>
      <Password ref="request.header.password"/>
      <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. यह पता लगाएं कि वेरिएबल को तय किया गया है या नहीं. साथ ही, यह भी पता लगाएं कि वह उस फ़्लो में उपलब्ध है या नहीं जिसमें BasicAuthentication नीति लागू की जा रही है.

  4. अगर वैरिएबल:

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

    अगर ऐसा है, तो गड़बड़ी की वजह यही है.

    ऊपर दी गई BasicAuthentication नीति के उदाहरण में, वैरिएबल request.header.Authorizationको अनुरोध के हिस्से के तौर पर पास नहीं किया गया था. इसका मतलब है कि अनुमति वाले हेडर के बिना ही एपीआई अनुरोध किया गया था, जैसा कि यहां दिखाया गया है:

    curl -v "http://org-env.apigee.net/basicauth"

    BasicAuthentication नीति में इस्तेमाल किया गया वैरिएबल उपलब्ध न होने की वजह से, आपको गड़बड़ी का कोड मिलता है:

    steps.basicauthentication.UnresolvedVariable
    

रिज़ॉल्यूशन

पक्का करें कि BasicAuthentication नीति में इस्तेमाल किए गए वैरिएबल को इनपुट के तौर पर तय किया गया हो या पास किया गया हो. साथ ही, वह उस फ़्लो में उपलब्ध हो जहां नीति लागू की जा रही है.

ऊपर बताई गई BasicAuthentication नीति के सैंपल से जुड़ी समस्या को ठीक करने के लिए, नीचे दिखाए गए तरीके से एपीआई अनुरोध करें:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

InvalidBasicAuthenticationSource

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

steps.basicauthentication.InvalidBasicAuthenticationSource

गड़बड़ी का जवाब

{
    "fault": {
        "faultstring": "Source variable : [variable_name] for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

गड़बड़ी का उदाहरण गड़बड़ी के मैसेज

{
    "fault": {
        "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

संभावित कारण

इस गड़बड़ी की ये वजहें हो सकती हैं:

वजह ब्यौरा
सोर्स वैरिएबल अमान्य है BasicAuthentication नीति का इनपुट सोर्स वैरिएबल, Base64 कोड में बदली गई मान्य स्ट्रिंग नहीं है.
हेडर का फ़ॉर्मैट गलत है BasicAuthentication नीति में पास की गई Base64 कोड में बदली गई स्ट्रिंग वाला हेडर गलत है.

वजह: सोर्स वैरिएबल अमान्य है

यह गड़बड़ी तब होती है, जब BasicAuthentication नीति के <Source> एलिमेंट में तय की गई, Base64 कोड में बदली गई स्ट्रिंग वाले वैरिएबल में कोई मान्य वैल्यू नहीं होती है.

उदाहरण के लिए, यह गड़बड़ी तब होती है, जब BasicAuthentication नीति के <Source> एलिमेंट में बताए गए वैरिएबल में, कोड में बदली गई Base64 की मान्य स्ट्रिंग न हो.

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

  1. BasicAuthentication नीति में <Source> एलिमेंट के लिए इस्तेमाल किए गए वैरिएबल की पहचान करें. आपको यह जानकारी, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकती है. उदाहरण के लिए, यहां दिए गए faultstring, में, <Source> एलिमेंट के लिए इस्तेमाल किया गया वैरिएबल request.header.Authorization है:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. उस एपीआई प्रॉक्सी में BasicAuthentication की सभी नीतियों की जांच करें जहां गड़बड़ी हुई है. BasicAuthentication की एक या उससे ज़्यादा नीतियां हो सकती हैं. बुनियादी पुष्टि करने से जुड़ी उस खास नीति की पहचान करें जिसमें <Source> एलिमेंट में तय किया गया वैरिएबल, गड़बड़ी वाली स्ट्रिंग में पहचाने गए वैरिएबल के नाम से मेल खाता है (ऊपर दिया गया चरण #1).

    उदाहरण के लिए, नीचे दी गई नीति, <Source> एलिमेंट को request.header.Authorization नाम के वैरिएबल पर सेट करती है. यह वैरिएबल, faultstring में मौजूद वैरिएबल से मेल खाता है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
        <DisplayName>Decode Basic Authentication Header</DisplayName>
        <Operation>Decode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="request.header.username"/>
        <Password ref="request.header.password"/>
        <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. अगर <Source> एलिमेंट में बताए गए वैरिएबल में सेव की गई वैल्यू, Base64 कोड में बदली गई मान्य स्ट्रिंग नहीं है, तोगड़बड़ी की यह वजह है.

    ऊपर दी गई 'बुनियादी पुष्टि करने की नीति' के उदाहरण में, क्लाइंट ने हेडर के तौर पर जो वैरिएबल request.header.Authorization भेजा था वह अमान्य था. जैसे:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic 23435"

    वैरिएबल request.header.Authorizationमें Base64 कोड में बदली गई स्ट्रिंग "23435" अमान्य है. इसलिए, आपको गड़बड़ी कोड मिलता है:

    steps.basicauthentication.InvalidBasicAuthenticationSource

रिज़ॉल्यूशन

पक्का करें कि BasicAuthentication नीति में <Source> एलिमेंट के लिए बताए गए वैरिएबल में, Base64 कोड में बदली गई मान्य स्ट्रिंग हो.

ऊपर बताई गई BasicAuthentication नीति के सैंपल से जुड़ी समस्या को ठीक करने के लिए, Authorization हेडर में मान्य Base64 कोड में बदली गई स्ट्रिंग डालकर, एपीआई का अनुरोध करें. इसके लिए, यहां दिया गया तरीका अपनाएं:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

वजह: हेडर गलत है/अमान्य है

यह गड़बड़ी तब होती है, जब BasicAuthentication नीति को पास किया गया हेडर गलत या अमान्य हो.

उदाहरण के लिए, यह गड़बड़ी तब होती है, जब BasicAuthentication नीति में<Source> एलिमेंट मेंrequest.header.Authorization के तौर पर कोई वैरिएबल तय किया गया हो और एपीआई अनुरोध के हिस्से के तौर पर पास किया गया हेडर गलत/अमान्य हो.

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

  1. BasicAuthentication नीति में <Source> एलिमेंट के लिए इस्तेमाल किए गए वैरिएबल की पहचान करें. आपको यह जानकारी, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकती है. उदाहरण के लिए, यहां दी गई गड़बड़ी में, <Source> एलिमेंट के लिए इस्तेमाल किया गया वैरिएबल request.header.Authorization है:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. उस खास एपीआई प्रॉक्सी में, BasicAuthentication की सभी नीतियों की जांच करें जहां गड़बड़ी हुई है. BasicAuthentication की एक या उससे ज़्यादा नीतियां हो सकती हैं. उन BasicAuthentication नीतियों की पहचान करें जिनमें <Source> एलिमेंट में बताए गए वैरिएबल का नाम, गड़बड़ी की जानकारी देने वाली स्ट्रिंग (ऊपर दिया गया पहला चरण) में बताए गए वैरिएबल के नाम से मेल खाता हो.

    उदाहरण के लिए, यह नीति <Source> एलिमेंट को request.header.Authorization नाम वाले वैरिएबल पर सेट करती है, जो faultstring में मौजूद वैरिएबल से मेल खाती है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
        <DisplayName>Decode Basic Authentication Header</DisplayName>
        <Operation>Decode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="request.header.username"/>
        <Password ref="request.header.password"/>
        <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. अगर वैरिएबल कोई हेडर है और वह गलत तरीके से लिखा गया है या अमान्य है, तो गड़बड़ी की वजह यह है. इसका मतलब है कि उसमें पुष्टि का तरीका नहीं है या पुष्टि का तरीका "बुनियादी" नहीं है.

    अनुमति हेडर इस फ़ॉर्मैट का होता है:

    Authorization: <Authentication type> <credentials>
    

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

    पहला उदाहरण: हेडर में पुष्टि करने का कोई तरीका नहीं है:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: YWthc2g6MTIz"

    ऊपर दिए गए उदाहरण में, अनुमति हेडर में पुष्टि करने का तरीका नहीं है. अगर इस हेडर को ऊपर दिखाई गई BasicAuthentication नीति में पास किया जाता है, तो आपको गड़बड़ी का कोड मिलता है:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    दूसरा उदाहरण: पुष्टि करने का तरीका "सामान्य" नहीं है:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    ऊपर दिए गए उदाहरण में, अनुमति हेडर में पुष्टि करने का तरीका "बुनियादी" नहीं है. अगर इसे ऊपर दिखाई गई BasicAuthentication नीति में पास किया जाता है, तो आपको गड़बड़ी का कोड मिलता है:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    इसी तरह, यह गड़बड़ी तब भी हो सकती है, जब अनुमति वाले हेडर में पुष्टि करने के लिए, Bearer, Digest Auth वगैरह का इस्तेमाल किया गया हो.

रिज़ॉल्यूशन

पक्का करें कि BasicAuthentication नीति में जो इनपुट दिया गया है उस हेडर में पुष्टि करने का तरीका "बुनियादी" हो.

ऊपर बताई गई BasicAuthentication नीति के सैंपल से जुड़ी समस्या को ठीक करने के लिए, Authorization हेडर में "Basic" पुष्टि करने के तरीके के साथ, मान्य Base64 एन्कोड की गई स्ट्रिंग को पास करके एपीआई अनुरोध करें. इसके लिए, नीचे दिया गया तरीका अपनाएं:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"