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

आपको 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 कोड में बदली गई स्ट्रिंग वाला वैरिएबल इनमें से कोई एक हो:

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

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

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

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

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. खास एपीआई प्रॉक्सी में, 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. यह तय करें कि जिस फ़्लो में BasicAuthentication नीति लागू की जा रही है उसमें वैरिएबल तय किया गया है और उपलब्ध है.

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

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

    फिर गड़बड़ी की वजह भी यही होगी.

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

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

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

    steps.basicauthentication.UnresolvedVariable
    

रिज़ॉल्यूशन

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

संभावित कारण

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

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

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

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

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

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

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

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. उस खास एपीआई प्रॉक्सी में, 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 की मान्य स्ट्रिंग हो.

पुष्टि करने की बुनियादी नीति के ऊपर बताए गए सैंपल से समस्या ठीक करने के लिए, नीचे दिए गए तरीके से अनुमति देने वाले हेडर में Base64 कोड में बदली गई मान्य स्ट्रिंग पास करें और एपीआई अनुरोध करें:

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

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

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

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

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

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

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. उस खास एपीआई प्रॉक्सी में, 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. अगर वैरिएबल कोई हेडर है और वह गलत या अमान्य है, यानी कि उसमें पुष्टि करने का टाइप नहीं है या पुष्टि करने का टाइप "बेसिक" नहीं है, तो गड़बड़ी की वजह यही है.

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

    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
    

    इसी तरह, यह गड़बड़ी तब भी आ सकती है, जब 'ऑथराइज़ेशन' हेडर में पुष्टि करने के तरीके, जैसे कि बेयरर, डाइजेस्ट की पुष्टि वगैरह का इस्तेमाल किया गया हो.

रिज़ॉल्यूशन

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

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

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