বেসিক যাচাইকরণ নীতি রানটাইম সমস্যা সমাধান করা

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

ডায়াগনসিস

  1. BasicAuthentication নীতিতে <Source> এলিমেন্টের জন্য ব্যবহৃত ভেরিয়েবল শনাক্ত করুন। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই তথ্য খুঁজে পাবেন। যেমন, নিম্নলিখিত faultstring,-এ <Source> এলিমেন্টের জন্য ব্যবহৃত ভেরিয়েবল হল request.header.Authorization:

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

    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"

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. যেখানে সমস্যা হয়েছে সেই নির্দিষ্ট API প্রক্সিতে সব 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 এনকোড করা স্ট্রিং পাস করে একটি 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. যেখানে সমস্যা হয়েছে সেই নির্দিষ্ট API প্রক্সিতে সব 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"

    উপরের উদাহরণে, অনুমোদনের হেডারে "Basic" যাচাইকরণের ধরন নেই। এটি উপরে দেখানো BasicAuthentication নীতিতে পাস করা হলে, আপনি এই সমস্যার কোডটি পাবেন:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    একইভাবে, অনুমোদন হেডার-এ Bearer, Digest Auth ইত্যাদির মতো যাচাইকরণের ধরন ব্যবহার করা হলে এই সমস্যা হতে পারে।

রেজোলিউশন

BasicAuthentication নীতিতে ইনপুট পাস করা হেডারটিতে যেন যাচাইকরণের ধরন থাকে এবং সেটি যেন "Basic" ধরনের হয় তা নিশ্চিত করুন।

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

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