JWT রানটাইম সমস্যা সমাধান করা

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

FailedToDecode

সমস্যার কোড

steps.jwt.FailedToDecode

সমস্যার উত্তরের বডি

{
  "fault": {
    "faultstring": "Failed to Decode Token: policy({0})",
    "detail": {
       "errorcode": "steps.jwt.FailedToDecode"
     }
  }
}

কারণ

Decode JWT নীতির <Source> এলিমেন্টে উল্লেখ করা JSON ওয়েব টোকেন (JWT) ভুল ফর্ম্যাটে থাকলে, অবৈধ হলে বা অন্য কোনও কারণে ডিকোড করা না গেলে এই সমস্যা হয়।

সঠিকভাবে স্ট্রাকচার করা JWT-তে নিম্নলিখিত ফর্ম্যাটে হেডার, পেলোড ও সিগনেচার থাকতে হবে: header.payload.signature. DecodeJWT নীতিতে পাস করা JWT-তে কোনও কম্পোনেন্ট পার্ট না থাকলে, আপনি এই সমস্যাটি পাবেন। যেমন, JWT-তে শুধুমাত্র payload.signature থাকলে এবং header না থাকলে, এই সমস্যাটি হবে।

ডায়াগনসিস

  1. Decode JWT নীতির <Source> এলিমেন্টে নির্দিষ্ট করা ভেরিয়েবল শনাক্ত করো। এই ভেরিয়েবলে JWT থাকতে হবে।

    JWT ডিকোড করার নীতির নমুনা এখানে দেওয়া হল:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    উপরের উদাহরণে, JWT-কে অবশ্যই অনুমোদনের অনুরোধের হেডারে থাকতে হবে।

  2. ধাপ ১-এ শনাক্ত করা ভেরিয়েবলটি পরীক্ষা করুন এবং এতে থাকা JWT সঠিক কিনা তা চেক করুন। ইনপুট JWT সঠিক না হলে, এটিই সমস্যার কারণ।

    নিচে API অনুরোধের উদাহরণে, ইনপুট JWT, অনুমোদনের অনুরোধের হেডার হিসেবে পাস করা হয়েছে:

    curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
    

    JWT ভালভাবে পরীক্ষা করে দেখা গেছে যে এতে payload.signature ফর্ম্যাট আছে যা সঠিক নয়। JWT-এর প্রত্যাশিত ফর্ম্যাট হল header.payload.signature. এর ফলে, Decode JWT নীতি এই সমস্যা সহ ব্যর্থ হয় :

    "faultstring": "Failed to Decode Token: policy({0})"
    

রেজোলিউশন

Decode JWT নীতিতে পাস করা JWT-তে তিনটি এলিমেন্টই আছে কিনা, সেটি সঠিকভাবে ফর্ম্যাট করা হয়েছে কিনা এবং সেটি ডিকোড করা যায় কিনা তা নিশ্চিত করুন।

উপরে দেখানো উদাহরণটি সংশোধন করতে, আপনি header.payload.signature ফর্ম্যাটে একটি বৈধ JWT পাস করতে পারেন। নিম্নলিখিত cURL কমান্ড ব্যবহার করে API কল করার মাধ্যমে এটি করা যেতে পারে:

curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"

InvalidToken

সমস্যার কোড

steps.jwt.InvalidToken

সমস্যার উত্তরের বডি

{
  "fault": {
    "faultstring": "Invalid token: policy({0})",
    "detail": {
      "errorcode": "steps.jwt.InvalidToken"
     }
  }
}

কারণ

Decode JWT নীতির <Source> এলিমেন্টে উল্লেখ করা ফ্লো ভেরিয়েবল যদি:

  • স্কোপের বাইরে (যে নির্দিষ্ট ফ্লোতে নীতি প্রয়োগ করা হচ্ছে সেখানে উপলভ্য নয়) অথবা
  • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত করা হয়নি)

ডায়াগনসিস

  1. Decode JWT নীতির <Source> এলিমেন্টে নির্দিষ্ট করা ভেরিয়েবল শনাক্ত করো। এই ভেরিয়েবলে JWT থাকতে হবে।

    JWT ডিকোড করার নীতির নমুনা এখানে দেওয়া হল:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    উপরের উদাহরণে, অনুমোদনের অনুরোধের হেডারে JWT থাকতে হবে।

  2. ধাপ ১-এ শনাক্ত করা ভেরিয়েবলটি, যে ফ্লোতে 'ডিকোড JWT' নীতি প্রয়োগ করা হয়েছে, সেখানে নির্দিষ্ট করা আছে কিনা এবং উপলভ্য কিনা তা নির্ধারণ করুন।

  3. ভেরিয়েবলটি যদি এগুলির মধ্যে কোনও একটি হয়:

    • স্কোপের বাইরে (যে নির্দিষ্ট ফ্লোতে নীতি প্রয়োগ করা হচ্ছে সেখানে উপলভ্য নয়) অথবা
    • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত করা হয়নি)

    তাহলে এটিই হল সমস্যার কারণ।

    নিচে API অনুরোধের যে উদাহরণ দেওয়া হয়েছে, সেখানে ব্যবহারকারী অনুমোদনের অনুরোধ হেডার হিসেবে JWT পাস করেননি।

    curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
    

    অনুমোদনের অনুরোধের হেডার পাস না করার কারণে, JWT ডিকোড করার নীতি এই সমস্যার সাথে ব্যর্থ হয়:

    "faultstring": "Invalid token: policy({0})"
    

রেজোলিউশন

Decode JWT নীতিতে <Source> এলিমেন্টে উল্লেখ করা ভেরিয়েবলটি যে সংজ্ঞায়িত করা হয়েছে, সেটিতে একটি সঠিক (ডিকোড করা যায় এমন) JWT আছে এবং Decode JWT নীতিটি যে নির্দিষ্ট ফ্লোতে এক্সিকিউট করা হচ্ছে সেখানে সেটি উপলভ্য আছে কিনা তা নিশ্চিত করুন।

উপরে দেখানো উদাহরণটি ঠিক করতে, আপনি অনুরোধের অনুমোদন হেডার একটি বৈধ JWT পাস করতে পারেন। নিম্নলিখিত cURL কমান্ড ব্যবহার করে API কল করার মাধ্যমে এটি করা যেতে পারে:

curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"