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

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

वजह

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

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

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

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

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

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

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

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

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

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

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

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

    steps.basicauthentication.UnresolvedVariable
    

रिज़ॉल्यूशन

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

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

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 Policy का इनपुट सोर्स वैरिएबल, Base64 से कोड में बदली गई मान्य स्ट्रिंग नहीं है.
हेडर गलत है वह हेडर गलत है जिसमें Base64 कोड में बदली गई स्ट्रिंग को BasicAuthentication नीति के साथ पास किया गया है.

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

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

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

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

  1. Basic पुष्टि की नीति में, <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 कोड में बदली गई कोई मान्य स्ट्रिंग नहीं है, तोइस गड़बड़ी की वजह यही है.

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource

रिज़ॉल्यूशन

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

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

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

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

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

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

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

  1. Basic पुष्टि की नीति में, <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>
    

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

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

रिज़ॉल्यूशन

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

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

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