DecodeJWT নীতি

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

কী

JWT-এর সিগনেচার যাচাই না করেই এটি ডিকোড করে। এটি VerifyJWT পলিসির সাথে একত্রে ব্যবহার করলে সবচেয়ে বেশি কার্যকর হয়, যখন JWT-এর সিগনেচার যাচাই করার আগে এর ভেতরের কোনো ক্লেইমের মান জানা আবশ্যক হয়।

JWT স্বাক্ষর করার জন্য কোন অ্যালগরিদম ব্যবহার করা হয়েছে তা নির্বিশেষে JWT ডিকোড পলিসি কাজ করে। বিস্তারিত পরিচিতির জন্য JWS এবং JWT পলিসি ওভারভিউ দেখুন।

ভিডিও

একটি JWT কীভাবে ডিকোড করতে হয় তা শিখতে একটি ছোট ভিডিও দেখুন।

নমুনা: একটি JWT ডিকোড করুন

নিম্নে প্রদর্শিত পলিসিটি `var.jwt` ফ্লো ভেরিয়েবলে থাকা একটি JWT ডিকোড করে। এই ভেরিয়েবলটি অবশ্যই উপস্থিত থাকতে হবে এবং এতে একটি কার্যকর (ডিকোডযোগ্য) JWT থাকতে হবে। পলিসিটি যেকোনো ফ্লো ভেরিয়েবল থেকে JWT-টি সংগ্রহ করতে পারে।

<DecodeJWT name="JWT-Decode-HS256">
    <DisplayName>JWT Verify HS256</DisplayName>
    <Source>var.jwt</Source>
</DecodeJWT>

পলিসিটি তার আউটপুট কনটেক্সট ভেরিয়েবলে লিখে রাখে, যাতে এপিআই প্রক্সির পরবর্তী পলিসি বা কন্ডিশনগুলো সেই মানগুলো পরীক্ষা করতে পারে। এই পলিসি দ্বারা সেট করা ভেরিয়েবলগুলোর তালিকার জন্য ফ্লো ভেরিয়েবলস দেখুন।

JWT ডিকোড করার জন্য এলিমেন্ট রেফারেন্স

পলিসি রেফারেন্সে ডিকোড JWT পলিসির উপাদান ও বৈশিষ্ট্যগুলো বর্ণনা করা হয়েছে।

শীর্ষ-স্তরের উপাদানে প্রযোজ্য অ্যাট্রিবিউটসমূহ

<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">

নিম্নলিখিত বৈশিষ্ট্যগুলি সকল পলিসি প্যারেন্ট এলিমেন্টের জন্য সাধারণ।

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
নাম পলিসির অভ্যন্তরীণ নাম। নামে আপনি যে অক্ষরগুলো ব্যবহার করতে পারবেন তা হলো: A-Z0-9._\-$ % । তবে, Edge ম্যানেজমেন্ট UI অতিরিক্ত বিধিনিষেধ আরোপ করে, যেমন অ্যালফানিউমেরিক নয় এমন অক্ষর স্বয়ংক্রিয়ভাবে মুছে ফেলা।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে পলিসিটিকে একটি ভিন্ন, স্বাভাবিক ভাষার নাম দিয়ে লেবেল করতে <displayname></displayname> এলিমেন্টটি ব্যবহার করুন।

প্রযোজ্য নয় প্রয়োজনীয়
continueOnError কোনো পলিসি ব্যর্থ হলে ত্রুটি ফেরত দিতে এটিকে false এ সেট করুন। বেশিরভাগ পলিসির ক্ষেত্রেই এটি একটি প্রত্যাশিত আচরণ।

কোনো পলিসি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে এটিকে ' true সেট করুন।

মিথ্যা ঐচ্ছিক
সক্ষম নীতিটি কার্যকর করতে এটিকে true তে সেট করুন।

পলিসিটি 'বন্ধ' করতে এটিকে 'ফলস' false সেট করুন। কোনো ফ্লো-এর সাথে সংযুক্ত থাকলেও পলিসিটি কার্যকর হবে না।

সত্য ঐচ্ছিক
অ্যাসিঙ্ক এই অ্যাট্রিবিউটটি অপ্রচলিত। মিথ্যা অপ্রচলিত

<ডিসপ্লে নাম>

<DisplayName>Policy Display Name</DisplayName>

ম্যানেজমেন্ট UI প্রক্সি এডিটরে পলিসিটিকে একটি ভিন্ন, স্বাভাবিক ভাষার নাম দিয়ে লেবেল করতে name অ্যাট্রিবিউটের পাশাপাশি এটি ব্যবহার করুন।

ডিফল্ট আপনি যদি এই উপাদানটি বাদ দেন, তাহলে পলিসির 'name' অ্যাট্রিবিউটের মান ব্যবহৃত হবে।
উপস্থিতি ঐচ্ছিক
প্রকার স্ট্রিং

<উৎস>

<Source>jwt-variable</Source>

উপস্থিত থাকলে, এটি সেই ফ্লো ভেরিয়েবলকে নির্দিষ্ট করে যেখানে পলিসিটি ডিকোড করার জন্য JWT-টি খুঁজে পাওয়ার প্রত্যাশা করে।

ডিফল্ট request.header.authorization (ডিফল্ট সম্পর্কে গুরুত্বপূর্ণ তথ্যের জন্য উপরের নোটটি দেখুন)।
উপস্থিতি ঐচ্ছিক
প্রকার স্ট্রিং
বৈধ মান একটি এজ ফ্লো ভেরিয়েবলের নাম

ফ্লো ভেরিয়েবল

সাফল্যের পরে, JWT যাচাই করুন এবং JWT ডিকোড নীতিগুলি এই প্যাটার্ন অনুসারে প্রসঙ্গ ভেরিয়েবল সেট করে:

jwt.{policy_name}.{variable_name}

উদাহরণ স্বরূপ, যদি পলিসির নাম jwt-parse-token হয়, তাহলে পলিসি JWT-এ উল্লেখিত বিষয়কে jwt.jwt-parse-token.decoded.claim.sub নামের কনটেক্সট ভেরিয়েবলে সংরক্ষণ করবে। (পশ্চাদগামী সামঞ্জস্যের জন্য, এটি jwt.jwt-parse-token.claim.subject এও উপলব্ধ হবে)

পরিবর্তনশীল নাম বর্ণনা
claim.audience জেডব্লিউটি দর্শকদের দাবি। এই মান একটি স্ট্রিং, বা স্ট্রিং একটি অ্যারে হতে পারে.
claim.expiry মেয়াদ শেষ হওয়ার তারিখ/সময়, যুগ থেকে মিলিসেকেন্ডে প্রকাশ করা হয়।
claim.issuedat টোকেন ইস্যু করার তারিখ, যুগ থেকে মিলিসেকেন্ডে প্রকাশ করা হয়েছে।
claim.issuer JWT ইস্যুকারী দাবি.
claim.notbefore যদি JWT একটি nbf দাবি অন্তর্ভুক্ত করে, তাহলে এই ভেরিয়েবলের মান থাকবে, যুগ থেকে মিলিসেকেন্ডে প্রকাশ করা হবে।
claim.subject JWT বিষয় দাবি.
claim. name পেলোডে নামযুক্ত দাবির মান (মান বা অতিরিক্ত)। এর মধ্যে একটি পেলোডের প্রতিটি দাবির জন্য সেট করা হবে।
decoded.claim. name পেলোডে নামযুক্ত দাবির (স্ট্যান্ডার্ড বা অতিরিক্ত) JSON-পার্সেবল মান। পেলোডের প্রতিটি দাবির জন্য একটি পরিবর্তনশীল সেট করা আছে। উদাহরণ স্বরূপ, আপনি জেডব্লিউটি-এর জারি-সময় পুনরুদ্ধার করতে decoded.claim.iat ব্যবহার করতে পারেন, যুগের পর থেকে কয়েক সেকেন্ডে প্রকাশ করা হয়েছে। যখন আপনি claim. name প্রবাহ ভেরিয়েবল, এটি একটি দাবি অ্যাক্সেস করতে ব্যবহার করার জন্য প্রস্তাবিত ভেরিয়েবল।
decoded.header. name পেলোডে হেডারের JSON- পার্সযোগ্য মান। পেলোডের প্রতিটি হেডারের জন্য একটি ভেরিয়েবল সেট করা আছে। আপনি header. name প্রবাহ ভেরিয়েবল, এটি একটি হেডার অ্যাক্সেস করার জন্য ব্যবহার করার জন্য প্রস্তাবিত ভেরিয়েবল।
expiry_formatted মেয়াদ শেষ হওয়ার তারিখ/সময়, মানব-পাঠযোগ্য স্ট্রিং হিসাবে ফর্ম্যাট করা হয়েছে। উদাহরণ: 2017-09-28T21:30:45.000+0000
header.algorithm JWT-তে ব্যবহৃত সাইনিং অ্যালগরিদম। উদাহরণস্বরূপ, RS256, HS384, এবং তাই। আরও জানতে (অ্যালগরিদম) হেডার প্যারামিটার দেখুন।
header.kid কী আইডি, যদি JWT তৈরি করার সময় যোগ করা হয়। একটি JWT যাচাই করার জন্য JWT নীতি ওভারভিউতে "একটি JSON ওয়েব কী সেট (JWKS) ব্যবহার করা" দেখুন। আরও জানতে (কী আইডি) হেডার প্যারামিটার দেখুন।
header.type JWT এ সেট করা হবে।
header. name নামযুক্ত হেডারের মান (মান বা অতিরিক্ত)। এর মধ্যে একটি JWT-এর হেডার অংশে প্রতিটি অতিরিক্ত হেডারের জন্য সেট করা হবে।
header-json JSON ফর্ম্যাটে হেডার।
is_expired সত্য বা মিথ্যা
payload-claim-names JWT দ্বারা সমর্থিত দাবির একটি অ্যারে।
payload-json
JSON ফর্ম্যাটে পেলোড।
seconds_remaining টোকেনের মেয়াদ শেষ হওয়ার আগে সেকেন্ডের সংখ্যা। টোকেন মেয়াদ শেষ হলে, এই সংখ্যা নেতিবাচক হবে.
time_remaining_formatted টোকেনটির মেয়াদ শেষ হওয়ার আগে অবশিষ্ট সময় মানব-পঠনযোগ্য স্ট্রিং হিসাবে ফর্ম্যাট করা হয়েছে। উদাহরণ: 00:59:59.926
valid VerifyJWT-এর ক্ষেত্রে, এই ভেরিয়েবলটি সত্য হবে যখন স্বাক্ষর যাচাই করা হবে, এবং বর্তমান সময়টি টোকেনের মেয়াদ শেষ হওয়ার আগে এবং টোকেন NotBefore মানের পরে, যদি তারা উপস্থিত থাকে। অন্যথায় মিথ্যা।

DecodeJWT এর ক্ষেত্রে, এই ভেরিয়েবল সেট করা হয় না।

ত্রুটির রেফারেন্স

এই বিভাগটি ফল্ট কোড এবং ত্রুটির বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ফল্ট কোড HTTP স্থিতি কারণ ঠিক করুন
steps.jwt.FailedToDecode 401 যখন নীতি JWT ডিকোড করতে অক্ষম হয় তখন ঘটে। JWT বিকৃত, অবৈধ বা অন্যথায় ডিকোডযোগ্য নয়।
steps.jwt.FailedToResolveVariable 401 যখন নীতির <Source> উপাদানে নির্দিষ্ট করা ফ্লো ভেরিয়েবল বিদ্যমান থাকে না তখন ঘটে।
steps.jwt.InvalidToken 401 যখন নীতির <Source> উপাদানে নির্দিষ্ট করা ফ্লো ভেরিয়েবলটি সুযোগের বাইরে থাকে বা সমাধান করা যায় না তখন ঘটে।

স্থাপনার ত্রুটি

আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷

ত্রুটির নাম কারণ ঠিক করুন
InvalidEmptyElement যখন ডিকোড করার জন্য JWT ধারণ করে ফ্লো ভেরিয়েবলটি নীতির <Source> উপাদানে নির্দিষ্ট করা হয় না তখন ঘটে।

ফল্ট ভেরিয়েবল

রানটাইম ত্রুটি ঘটলে এই ভেরিয়েবলগুলি সেট করা হয়। আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।

ভেরিয়েবল যেখানে উদাহরণ
fault.name=" fault_name " fault_name হল ফল্টের নাম, যা উপরে রানটাইম ত্রুটির সারণীতে তালিকাভুক্ত করা হয়েছে। ফল্ট নামটি ফল্ট কোডের শেষ অংশ। fault.name Matches "TokenExpired"
JWT.failed সমস্ত JWT নীতি ব্যর্থতার ক্ষেত্রে একই পরিবর্তনশীল সেট করে। JWT.failed = true

উদাহরণ ত্রুটি প্রতিক্রিয়া

JWT পলিসি ফল্ট কোড

ত্রুটি পরিচালনার জন্য, সর্বোত্তম অনুশীলন হল ত্রুটি প্রতিক্রিয়ার errorcode অংশটি আটকে রাখা। faultstring -এ লেখার উপর নির্ভর করবেন না, কারণ এটি পরিবর্তন হতে পারে।

উদাহরণ দোষ নিয়ম

    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "TokenExpired")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>