DecodeJWT নীতি

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

কী

JWT-তে স্বাক্ষর যাচাই না করেই JWT ডিকোড করে। JWT-এর স্বাক্ষর যাচাই করার আগে JWT-এর মধ্যে থেকে কোনও দাবি সম্পর্কে জানতে হলে, VerifyJWT নীতি-র সাথে একযোগে ব্যবহার করলে এটি সবচেয়ে উপযোগী হয়।

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>

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

Decode JWT-এর জন্য এলিমেন্ট রেফারেন্স

নীতি সংক্রান্ত রেফারেন্সে, JWT ডিকোড করার নীতির এলিমেন্ট ও অ্যাট্রিবিউট বর্ণনা করা আছে।

টপ-লেভেল এলিমেন্টে প্রযোজ্য অ্যাট্রিবিউট

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

সব নীতি সংক্রান্ত পেরেন্ট এলিমেন্টের ক্ষেত্রে নিম্নলিখিত অ্যাট্রিবিউট সাধারণ।

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

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

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

true-এ সেট করা থাকলে, নীতি কাজ না করলেও ফ্লো এক্সিকিউশন চলতে থাকে।

মিথ্যা ঐচ্ছিক
সক্ষমিত নীতি প্রয়োগ করতে true হিসেবে সেট করুন।

নীতি "বন্ধ করতে" false হিসেবে সেট করুন। কোনও ফ্লোতে এটি অ্যাটাচ করা থাকলেও, নীতিটি প্রয়োগ করা হবে না ।

সত্য ঐচ্ছিক
async এই অ্যাট্রিবিউট আর কাজ করে না। মিথ্যা বন্ধ করে দেওয়া হয়েছে

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

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

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

<Source>

<Source>jwt-variable</Source>

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

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

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

সাফল্যের পরে, 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 এর ক্ষেত্রে, এই ভেরিয়েবল সেট করা হয় না।

সমস্যার রেফারেন্স

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

রানটাইম সমস্যা

নীতি এক্সিকিউট করার সময় এই সমস্যা হতে পারে।

সমস্যার কোড 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>