আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
ডিকোড করতে ব্যর্থ
ত্রুটি কোড
steps.jwt.FailedToDecode
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
কারণ
ডিকোড জেডব্লিউটি পলিসির <Source> এলিমেন্টে নির্দিষ্ট করা জেএসওএন ওয়েব টোকেন (JWT) ত্রুটিপূর্ণ, অবৈধ বা অন্য কোনো কারণে ডিকোডযোগ্য না হলে এই ত্রুটিটি ঘটে।
একটি সঠিকভাবে গঠিত JWT-তে header.payload.signature ফরম্যাটে একটি হেডার, পেলোড এবং সিগনেচার থাকা উচিত। DecodeJWT পলিসিতে পাঠানো JWT-তে যদি কোনো একটি অংশ অনুপস্থিত থাকে, তাহলে আপনি একটি এরর পাবেন। উদাহরণস্বরূপ, যদি JWT-টিতে শুধু payload.signature থাকে, কিন্তু এর header না থাকে, তাহলে এররটি ঘটবে।
রোগ নির্ণয়
ডিকোড JWT পলিসির
<Source>এলিমেন্টে নির্দিষ্ট করা ভেরিয়েবলটি শনাক্ত করুন। এই ভেরিয়েবলটিতে JWT থাকা উচিত।এখানে একটি নমুনা ডিকোড JWT পলিসি দেওয়া হলো:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>উপরের উদাহরণে, JWT-টি Authorization রিকোয়েস্ট হেডারে অন্তর্ভুক্ত থাকা উচিত।
ধাপ ১-এ চিহ্নিত ভেরিয়েবলটি পরীক্ষা করুন এবং দেখুন এর মধ্যে থাকা JWT-টি বৈধ কিনা। যদি ইনপুট JWT-টি বৈধ না হয়, তাহলে সেটাই ত্রুটির কারণ।
নীচের উদাহরণ API অনুরোধটিতে, ইনপুট JWT-টি Authorization অনুরোধ হেডারে পাঠানো হয়:
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})"
সমাধান
নিশ্চিত করুন যে ডিকোড 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"
অবৈধ টোকেন
ত্রুটি কোড
steps.jwt.InvalidToken
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
কারণ
ডিকোড JWT পলিসির <Source> এলিমেন্টে নির্দিষ্ট করা ফ্লো ভেরিয়েবলটি যদি নিম্নলিখিত হয়, তাহলে এই ত্রুটিটি ঘটে:
- আওতার বাইরে (যে নির্দিষ্ট কার্যপ্রবাহে নীতিমালাটি কার্যকর করা হচ্ছে সেখানে উপলব্ধ নয়) অথবা
- সমাধান করা যাচ্ছে না (সংজ্ঞায়িত নয়)
রোগ নির্ণয়
ডিকোড JWT পলিসির
<Source>এলিমেন্টে নির্দিষ্ট করা ভেরিয়েবলটি শনাক্ত করুন। এই ভেরিয়েবলটিতে JWT থাকা উচিত।এখানে একটি নমুনা ডিকোড JWT পলিসি দেওয়া হলো:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>উপরের উদাহরণে, Authorization রিকোয়েস্ট হেডারে JWT থাকা উচিত।
ধাপ ১-এ চিহ্নিত ভেরিয়েবলটি সেই ফ্লো-তে সংজ্ঞায়িত এবং উপলব্ধ আছে কিনা তা নির্ধারণ করুন, যেখানে ডিকোড JWT পলিসিটি কার্যকর করা হয়।
যদি ভেরিয়েবলটি হয়:
- আওতার বাইরে (যে নির্দিষ্ট কার্যপ্রবাহে নীতিমালাটি কার্যকর করা হচ্ছে সেখানে উপলব্ধ নয়) অথবা
- সমাধান করা যাচ্ছে না (সংজ্ঞায়িত নয়)
তাহলে এটাই ত্রুটির কারণ।
নীচের উদাহরণ API অনুরোধটিতে, ব্যবহারকারী অনুমোদন অনুরোধ হেডারে JWT পাস করেননি।
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
অনুমোদন অনুরোধ হেডারটি পাস না করার কারণে, ডিকোড JWT পলিসিটি নিম্নলিখিত ত্রুটির সাথে ব্যর্থ হয়:
"faultstring": "Invalid token: policy({0})"
সমাধান
নিশ্চিত করুন যে ডিকোড JWT পলিসির <Source> এলিমেন্টে উল্লেখিত ভেরিয়েবলটি সংজ্ঞায়িত, এতে একটি বৈধ (ডিকোডযোগ্য) JWT রয়েছে এবং যে নির্দিষ্ট ফ্লোতে ডিকোড JWT পলিসিটি কার্যকর করা হচ্ছে, সেখানে এটি উপলব্ধ আছে।
উপরে দেখানো উদাহরণটি সংশোধন করতে, আপনি অনুরোধের অনুমোদন হেডারে একটি বৈধ JWT পাস করতে পারেন। এটি করার জন্য, নিম্নলিখিতভাবে cURL কমান্ড ব্যবহার করে API কলটি করতে হবে:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"