মৌলিক প্রমাণীকরণ নীতি রানটাইম ত্রুটি সমস্যা সমাধান

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

অমীমাংসিত পরিবর্তনশীল

ত্রুটি কোড

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 নামে একটি ভ্যারিয়েবল নির্দিষ্ট করা থাকে, কিন্তু API অনুরোধের অংশ হিসেবে 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 ভেরিয়েবলটি রিকোয়েস্টের অংশ হিসেবে পাস করা হয়নি। অর্থাৎ, নিচে দেখানো অনুযায়ী Authorization হেডার ছাড়াই এপিআই রিকোয়েস্টটি করা হয়েছিল:

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

    BasicAuthentication পলিসিতে ব্যবহৃত ভেরিয়েবলটি উপলব্ধ না থাকায়, আপনি এই এরর কোডটি পাচ্ছেন:

    steps.basicauthentication.UnresolvedVariable
    

সমাধান

নিশ্চিত করুন যে BasicAuthentication পলিসিতে ব্যবহৃত ভেরিয়েবলটি সংজ্ঞায়িত করা হয়েছে অথবা ইনপুট হিসেবে পাস করা হয়েছে এবং যে ফ্লো-তে পলিসিটি কার্যকর করা হচ্ছে, সেখানে এটি উপলব্ধ আছে।

উপরে আলোচিত নমুনা BasicAuthentication পলিসির সমস্যাটি সমাধান করতে, নিচে দেখানো অনুযায়ী একটি API অনুরোধ করুন:

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

অবৈধ মৌলিক প্রমাণীকরণ উৎস

ত্রুটি কোড

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 এনকোডেড স্ট্রিং নয়।
হেডারটি ত্রুটিপূর্ণ 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 ভেরিয়েবলটিতে " 23435" একটি অবৈধ Base64 এনকোডেড স্ট্রিং রয়েছে, তাই আপনি এই এরর কোডটি পাচ্ছেন:

    steps.basicauthentication.InvalidBasicAuthenticationSource

সমাধান

নিশ্চিত করুন যে BasicAuthentication পলিসির <Source> এলিমেন্টের জন্য নির্দিষ্ট করা ভেরিয়েবলটিতে একটি বৈধ Base64 এনকোডেড স্ট্রিং রয়েছে।

উপরে আলোচিত নমুনা BasicAuthentication পলিসির সমস্যাটি সমাধান করতে, নিচে দেখানো অনুযায়ী Authorization হেডারে একটি বৈধ Base64 এনকোডেড স্ট্রিং পাস করে একটি API রিকোয়েস্ট করুন:

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

কারণ: হেডারটি ত্রুটিপূর্ণ/অবৈধ।

BasicAuthentication পলিসিতে পাঠানো হেডারটি ত্রুটিপূর্ণ বা অবৈধ হলে এই ত্রুটিটি ঘটে।

উদাহরণস্বরূপ, এই ত্রুটিটি ঘটে যদি BasicAuthentication পলিসির <Source> এলিমেন্টে request.header.Authorization নামে একটি ভ্যারিয়েবল নির্দিষ্ট করা থাকে এবং API অনুরোধের অংশ হিসাবে পাঠানো হেডারটি ত্রুটিপূর্ণ বা অবৈধ হয়।

রোগ নির্ণয়

  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"

    উপরের উদাহরণে, Authorization হেডারে Authentication টাইপটি নেই। যদি এই হেডারটি উপরে দেখানো BasicAuthentication পলিসিতে পাস করা হয়, তাহলে আপনি এই এরর কোডটি পাবেন:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    উদাহরণ ২ : প্রমাণীকরণ ধরণটি "বেসিক" ধরনের নয়:

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

    উপরের উদাহরণে, Authorization হেডারে Authentication type হিসেবে "Basic" নেই। যদি এটি উপরে দেখানো BasicAuthentication পলিসিতে পাস করা হয়, তাহলে আপনি এই এরর কোডটি পাবেন:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    একইভাবে, Authorization হেডারে Bearer, Digest Auth ইত্যাদির মতো Authentication type ব্যবহার করা হলেও এই ত্রুটি ঘটতে পারে।

সমাধান

নিশ্চিত করুন যে BasicAuthentication পলিসিতে ইনপুট পাঠানোর হেডারে Authentication টাইপটি রয়েছে এবং এর টাইপ "Basic"।

উপরে আলোচিত নমুনা BasicAuthentication পলিসির সমস্যাটি সমাধান করতে, নিচে দেখানো অনুযায়ী Authorization হেডারে 'Basic' Authentication type সহ একটি বৈধ Base64 এনকোডেড স্ট্রিং পাস করে একটি API রিকোয়েস্ট করুন:

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