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

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

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

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 नीतियां हो सकती हैं. उस 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. अगर <Source> एलिमेंट में मौजूद वैरिएबल में सेव की गई वैल्यू, Base64 कोड में बदली गई मान्य स्ट्रिंग नहीं है, तो यह गड़बड़ी की वजह है.

    ऊपर दिए गए उदाहरण में, BasicAuthentication नीति में, क्लाइंट ने हेडर के तौर पर 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. अगर वैरिएबल एक हेडर है और वह गलत तरीके से बनाया गया है या अमान्य है, यानी कि उसमें पुष्टि करने का टाइप नहीं है या पुष्टि करने का टाइप "Basic" नहीं है, तो गड़बड़ी की वजह यही है.

    Authorization हेडर इस फ़ॉर्म में होता है:

    Authorization: <Authentication type> <credentials>
    

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

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

रिज़ॉल्यूशन

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

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

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