GenerateJWT নীতি

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

কী

দাবিগুলির কনফিগার করা সেট সহ একটি স্বাক্ষরিত JWT তৈরি করে। JWT তারপরে ক্লায়েন্টকে ফেরত পাঠানো, ব্যাকএন্ড টার্গেটে ট্রান্সমিট করা বা অন্য উপায়ে ব্যবহার করা যেতে পারে। বিস্তারিত ভূমিকা পেতে JWS ও JWT নীতি ওভারভিউ দেখুন।

ভিডিও

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

নমুনা

HS256 অ্যালগরিদম দিয়ে সাইন করা JWT তৈরি করো

এই উদাহরণ নীতি একটি নতুন JWT তৈরি করে এবং HS256 অ্যালগরিদম ব্যবহার করে এটি সাইন করে। HS256, স্বাক্ষর যাচাই ও স্বাক্ষর করার জন্য শেয়ার করা সিক্রেটের উপর নির্ভর করে।

এই নীতি সংক্রান্ত অ্যাকশন ট্রিগার করা হলে, Edge JWT হেডার ও পেলোড এনকোড করে, তারপর JWT-তে ডিজিটাল সিগনেচার করে। নীতিতে কীভাবে অনুরোধ করতে হয় তা সহ সম্পূর্ণ উদাহরণের জন্য উপরের ভিডিওটি দেখুন।

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

<GenerateJWT name="JWT-Generate-HS256">
    <DisplayName>JWT Generate HS256</DisplayName>
    <Algorithm>HS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
    <OutputVariable>jwt-variable</OutputVariable>
</GenerateJWT>

এর ফলে যে JWT তৈরি হবে তাতে এই হেডার থাকবে …

{
  "typ" : "JWT", 
  "alg" : "HS256",
  "kid" : "1918290"
}

… এবং এই ধরনের কন্টেন্ট সহ পেলোড থাকবে:

{ 
  "sub" : "monty-pythons-flying-circus",
  "iss" : "urn://apigee-edge-JWT-policy-test",
  "aud" : "show",
  "iat" : 1506553019,
  "exp" : 1506556619,
  "jti" : "BD1FF263-3D25-4593-A685-5EC1326E1F37",
  "show": "And now for something completely different."
}

iat, exp ও jti দাবি -এর ভ্যালু আলাদা আলাদা হবে।

RS256 অ্যালগরিদম দিয়ে স্বাক্ষর করা JWT তৈরি করা

এই উদাহরণ নীতি একটি নতুন JWT তৈরি করে এবং RS256 অ্যালগরিদম ব্যবহার করে এটি সাইন করে। RS256 সিগনেচার তৈরি করার জন্য RSA প্রাইভেট কী প্রয়োজন, যা অবশ্যই PEM-এনকোডেড ফর্ম্যাটে দিতে হবে। নীতিতে কীভাবে অনুরোধ করতে হয় তা সহ সম্পূর্ণ উদাহরণের জন্য উপরের ভিডিওটি দেখুন।

এই নীতি অ্যাকশন ট্রিগার করা হলে, Edge দাবি সহ JWT এনকোড করে এবং ডিজিটাল স্বাক্ষর করে। JWT-এর অংশ এবং সেগুলি কীভাবে এনক্রিপ্ট ও সাইন করা হয় সেই সম্পর্কে জানতে, RFC7519 দেখুন।

<GenerateJWT name="JWT-Generate-RS256">
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PrivateKey>
        <Value ref="private.privatekey"/>
        <Password ref="private.privatekey-password"/>
        <Id ref="private.privatekey-id"/>
    </PrivateKey>
    <Subject>apigee-seattle-hatrack-montage</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience>
    <ExpiresIn>60m</ExpiresIn>
    <Id/>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
    <OutputVariable>jwt-variable</OutputVariable>
</GenerateJWT>

মূল এলিমেন্ট সেট করা

JWT জেনারেট করার জন্য ব্যবহৃত কী নির্দিষ্ট করতে আপনি যেসব এলিমেন্ট ব্যবহার করেন তা বেছে নেওয়া অ্যালগরিদমের উপর নির্ভর করে, যেমনটি নিম্নলিখিত টেবিলে দেখানো হয়েছে:

অ্যালগরিদম গুরুত্বপূর্ণ এলিমেন্ট
HS{256/384/512}*
<SecretKey>
  <Value ref="private.secretkey"/>
  <Id>1918290</Id>
</SecretKey>
RS/PS/ES{256/384/512}*
<PrivateKey>
  <Value ref="private.privatekey"/>
  <Password ref="private.privatekey-password"/>
  <Id ref="private.privatekey-id"/>
</PrivateKey>

<Password> ও <Id> এলিমেন্ট ঐচ্ছিক।

*কী সংক্রান্ত প্রয়োজনীয়তা সম্পর্কে আরও জানতে, সিগনেচার এনক্রিপশন অ্যালগরিদম সম্পর্কে দেখুন।

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

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

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

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

<GenerateJWT 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 প্রক্সি এডিটরে নীতিকে অন্য, স্বাভাবিক-ভাষার নাম দিয়ে লেবেল করার জন্য নাম অ্যাট্রিবিউটের সাথে এটি ব্যবহার করুন ।

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

<Algorithm>

<Algorithm>algorithm-here</Algorithm>

টোকেনে সই করার জন্য এনক্রিপশন অ্যালগরিদম নির্দিষ্ট করে।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি প্রয়োজনীয়
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512

<Audience>

<Audience>audience-here</Audience>

or:

<Audience ref='variable_containing_audience'/>

নীতিটি একটি JWT তৈরি করে যাতে নির্দিষ্ট ভ্যালুতে সেট করা aud দাবি থাকে। এই দাবিটি সেইসব প্রাপককে শনাক্ত করে যাদের জন্য JWT তৈরি করা হয়েছে। এটি RFC7519-এ উল্লেখ করা রেজিস্টার করা দাবিগুলির মধ্যে একটি।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন অ্যারে (কমা দিয়ে আলাদা করা ভ্যালুর তালিকা)
সঠিক ভ্যালু এমন কিছু যা দর্শককে শনাক্ত করে।

<AdditionalClaims/Claim>

<AdditionalClaims>
    <Claim name='claim1'>explicit-value-of-claim-here</Claim>
    <Claim name='claim2' ref='variable-name-here'/>
    <Claim name='claim3' ref='variable-name-here' type='boolean'/>
</AdditionalClaims>

or:

<AdditionalClaims ref='claim_payload'/>

JWT-এর পেলোডে অতিরিক্ত দাবি নাম/ভ্যালু পেয়ার নির্দিষ্ট করতে দেয়। আপনি স্ট্রিং, সংখ্যা, বুলিয়ান, ম্যাপ বা অ্যারে হিসেবে দাবি স্পষ্টভাবে উল্লেখ করতে পারেন। ম্যাপ হল নাম/ভ্যালু জোড়ের একটি সেট।

type=map হলে,
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
সঠিক ভ্যালু অতিরিক্ত দাবি জানানোর জন্য আপনি যে ভ্যালু ব্যবহার করতে চান। আপনি স্ট্রিং, সংখ্যা, বুলিয়ান, ম্যাপ বা অ্যারে হিসেবে দাবি স্পষ্টভাবে উল্লেখ করতে পারেন।

<Claim> এলিমেন্ট এই অ্যাট্রিবিউটগুলি নেয়:

  • name - (আবশ্যক) দাবির নাম।
  • ref - (ঐচ্ছিক) ফ্লো ভেরিয়েবলের নাম। উপস্থিত থাকলে, নীতিটি এই ভেরিয়েবলের ভ্যালুকে দাবি হিসেবে ব্যবহার করবে। ref অ্যাট্রিবিউট ও স্পষ্ট দাবি ভ্যালু, দু'টিই উল্লেখ করা থাকলে, স্পষ্ট ভ্যালু ডিফল্ট হিসেবে ধরে নেওয়া হয় এবং রেফারেন্স করা ফ্লো ভেরিয়েবল সমাধান না করা গেলে এটি ব্যবহার করা হয়।
  • type - (ঐচ্ছিক) এগুলির মধ্যে একটি: string (ডিফল্ট), number, boolean বা map
  • array - (ঐচ্ছিক) ভ্যালু যদি কোনও ধরনের অ্যারে হয়, তাহলে তা বোঝাতে true হিসেবে সেট করুন। ডিফল্ট: false.

আপনি <Claim> এলিমেন্ট যোগ করলে, নীতি কনফিগার করার সময় দাবিগুলির নাম স্ট্যাটিক হিসেবে সেট করা হয়। বিকল্প হিসেবে, আপনি দাবিগুলির নাম নির্দিষ্ট করতে একটি JSON অবজেক্ট পাস করতে পারেন। JSON অবজেক্টটি ভেরিয়েবল হিসেবে পাস করা হয় বলে, জেনারেট করা JWT-তে দাবিগুলির নাম রানটাইমে নির্ধারণ করা হয়।

যেমন:

<AdditionalClaims ref='json_claims'/>

যেখানে ভেরিয়েবল json_claims-এ এই ফর্মের JSON অবজেক্ট আছে:

{
  "sub" : "person@example.com",
  "iss" : "urn://secure-issuer@example.com",
  "non-registered-claim" : {
    "This-is-a-thing" : 817,
    "https://example.com/foobar" : { "p": 42, "q": false }
  }
}

জেনারেট করা JWT-তে JSON অবজেক্টের মধ্যে থাকা সব দাবি অন্তর্ভুক্ত থাকে।

<AdditionalHeaders/Claim>

<AdditionalHeaders>
    <Claim name='claim1'>explicit-value-of-claim-here</Claim>
    <Claim name='claim2' ref='variable-name-here'/>
    <Claim name='claim3' ref='variable-name-here' type='boolean'/>
    <Claim name='claim4' ref='variable-name' type='string' array='true'/>
 </AdditionalHeaders>

JWT-এর হেডার অংশে অতিরিক্ত দাবি সংক্রান্ত নাম/ভ্যালু পেয়ার যোগ করে।

type=map হলে,
ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
সঠিক ভ্যালু অতিরিক্ত দাবি জানানোর জন্য আপনি যে ভ্যালু ব্যবহার করতে চান। আপনি স্ট্রিং, সংখ্যা, বুলিয়ান, ম্যাপ বা অ্যারে হিসেবে দাবি স্পষ্টভাবে উল্লেখ করতে পারেন।

<Claim> এলিমেন্ট এই অ্যাট্রিবিউটগুলি নেয়:

  • name - (আবশ্যক) দাবির নাম।
  • ref - (ঐচ্ছিক) ফ্লো ভেরিয়েবলের নাম। উপস্থিত থাকলে, নীতিটি এই ভেরিয়েবলের ভ্যালুকে দাবি হিসেবে ব্যবহার করবে। ref অ্যাট্রিবিউট ও স্পষ্ট দাবি ভ্যালু, দু'টিই উল্লেখ করা থাকলে, স্পষ্ট ভ্যালু ডিফল্ট হিসেবে ধরে নেওয়া হয় এবং রেফারেন্স করা ফ্লো ভেরিয়েবল সমাধান না করা গেলে এটি ব্যবহার করা হয়।
  • type - (ঐচ্ছিক) এগুলির মধ্যে একটি: string (ডিফল্ট), number, boolean বা map
  • array - (ঐচ্ছিক) ভ্যালু যদি কোনও ধরনের অ্যারে হয়, তাহলে তা বোঝাতে true হিসেবে সেট করুন। ডিফল্ট: false.

<CriticalHeaders>

<CriticalHeaders>a,b,c</CriticalHeaders>

or:

<CriticalHeaders ref=’variable_containing_headers’/>

JWT হেডারে গুরুত্বপূর্ণ হেডার, crit, যোগ করে। crit হেডার হল হেডার নামের একটি অ্যারে যা JWT রিসিভারকে অবশ্যই জানতে ও চিনতে হবে। যেমন:

{
  “typ: “...”,
  “alg” : “...”,
  “crit” : [ “a”, “b”, “c” ],
}

রানটাইমে, VerifyJWT নীতি crit হেডার পরীক্ষা করে। crit শীর্ষকে তালিকাভুক্ত প্রতিটি আইটেমের জন্য, এটি চেক করে যে VerifyJWT নীতির <KnownHeaders> এলিমেন্টেও সেই শীর্ষকের তালিকা আছে। VerifyJWT নীতি crit-এ এমন কোনও হেডার খুঁজে পেলে যা <KnownHeaders>-এও তালিকাভুক্ত নেই, তাহলে VerifyJWT নীতি কাজ করে না।

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

<CustomClaims>

মনে রাখবেন: বর্তমানে, আপনি UI-এর মাধ্যমে নতুন GenerateJWT নীতি যোগ করলে, একটি CustomClaims এলিমেন্ট যোগ করা হয়। এই এলিমেন্ট কাজ করে না এবং এটি উপেক্ষা করা হয়। এর পরিবর্তে ব্যবহার করার জন্য সঠিক এলিমেন্ট হল <AdditionalClaims>। UI পরে সঠিক এলিমেন্ট যোগ করার জন্য আপডেট করা হবে।

<ExpiresIn>

<ExpiresIn>time-value-here</ExpiresIn>

JWT-এর মেয়াদ মিলিসেকেন্ড, সেকেন্ড, মিনিট, ঘণ্টা বা দিনে নির্দিষ্ট করে।

ডিফল্ট N/A
উপস্থিতি ঐচ্ছিক
টাইপ করুন পূর্ণসংখ্যা
সঠিক ভ্যালু

মান বা মান সহ ফ্লো ভেরিয়েবলের রেফারেন্স। সময়ের একককে নিম্নলিখিতভাবে নির্দিষ্ট করা যেতে পারে:

  • ms = মিলিসেকেন্ড (ডিফল্ট)
  • s = সেকেন্ড
  • মি = মিনিট
  • ঘ = ঘণ্টা
  • d = দিন

যেমন, ExpiresIn=10d হল ExpiresIn-এর সমান ৮৬৪০০০০ সেকেন্ড।

<Id>

<Id>explicit-jti-value-here</Id>
 -or-
<Id ref='variable-name-here'/>
 -or-
<Id/>

নির্দিষ্ট jti দাবি সহ JWT তৈরি করে। টেক্সট ভ্যালু ও ref অ্যাট্রিবিউট, দুটিই খালি থাকলে, নীতিটি একটি র‍্যান্ডম UUID সহ jti জেনারেট করবে। JWT ID (jti) দাবি হল JWT-এর জন্য অনন্য শনাক্তকারী। jti সম্পর্কে আরও তথ্যের জন্য, RFC7519 দেখুন।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং বা রেফারেন্স।
সঠিক ভ্যালু আইডি সহ ফ্লো ভেরিয়েবলের নাম বা স্ট্রিং।

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

নীতিতে উল্লেখ করা কোনও ভেরিয়েবল সমাধান করা না গেলে, আপনি যদি চান যে নীতিটি একটি সমস্যা দেখাক, তাহলে এটি false হিসেবে সেট করুন। কোনও সমাধান করা যায় না এমন ভেরিয়েবলকে খালি স্ট্রিং (নাল) হিসেবে গণ্য করতে true হিসেবে সেট করুন।

ডিফল্ট মিথ্যা
উপস্থিতি ঐচ্ছিক
টাইপ করুন বুলিয়ান
সঠিক ভ্যালু ঠিক বা ভুল

<Issuer>

<Issuer ref='variable-name-here'/>
<Issuer>issuer-string-here</Issuer>

নীতিটি iss নামের একটি দাবি সহ JWT তৈরি করে,যার মান নির্দিষ্ট করা মানের সাথে সেট করা থাকে। JWT-এর ইস্যুকারীকে শনাক্ত করে এমন দাবি। এটি RFC7519-এ উল্লেখ করা রেজিস্টার করা দাবিগুলির সেটের মধ্যে একটি।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং বা রেফারেন্স
সঠিক ভ্যালু যেকোনও

<NotBefore>

<!-- Specify an absolute time. -->
<NotBefore>2017-08-14T11:00:21-07:00</NotBefore>
 -or-
<!-- Specify a time relative to when the token is generated. -->
<NotBefore>6h</NotBefore>

টোকেন কখন বৈধ হবে তা নির্দিষ্ট করে। নির্দিষ্ট সময় পর্যন্ত টোকেনটি সঠিক নয়। আপনি একটি নির্দিষ্ট সময়সূচক ভ্যালু অথবা টোকেন তৈরি হওয়ার সময় অনুযায়ী আপেক্ষিক সময় উল্লেখ করতে পারেন।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু নিচে দেখুন।

পরম সময়ের ভ্যালুর জন্য NotBefore এলিমেন্টের সঠিক সময়ের ভ্যালু

নাম ফর্ম্যাট উদাহরণ
সাজানো যায় yyyy-MM-dd'T'HH:mm:ss.SSSZ 2017-08-14T11:00:21.269-0700
RFC 1123 EEE, dd MMM yyyy HH:mm:ss zzz সোম, ১৪ আগস্ট, ২০১৭ ১১:০০:২১ PDT
RFC 850 EEEE, dd-MMM-yy HH:mm:ss zzz সোমবার, ১৪-আগস্ট-১৭ ১১:০০:২১ পিডিটি
ANCI-C EEE MMM d HH:mm:ss yyyy সোম ১৪ আগস্ট, ২০১৭ ১১:০০:২১

আপেক্ষিক সময়ের ভ্যালুর জন্য, একটি পূর্ণসংখ্যা ও সময়সীমা উল্লেখ করুন, যেমন:

  • ১০সে
  • ৬০ মিটার
  • ১২ ঘণ্টা

<OutputVariable>

<OutputVariable>jwt-variable</OutputVariable>

এই নীতি দ্বারা তৈরি JWT কোথায় প্লেস করতে হবে তা নির্দিষ্ট করে। ডিফল্ট হিসেবে এটি ফ্লো ভেরিয়েবল jwt.POLICYNAME.generated_jwt-এ প্লেস করা হয়।

ডিফল্ট jwt.POLICYNAME.generated_jwt
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং (ফ্লো ভেরিয়েবলের নাম)

<PrivateKey/Id>

<PrivateKey>
  <Id ref="flow-variable-name-here"/>
</PrivateKey>

or

<PrivateKey>
  <Id>your-id-value-here</Id>
</PrivateKey>

JWT হেডারে অন্তর্ভুক্ত করার জন্য কী ID (kid) নির্দিষ্ট করে। অ্যালগরিদম RS256/RS384/RS512, PS256/PS384/PS512 অথবা ES256/ES384/ES512 হলে শুধুমাত্র এটি ব্যবহার করুন।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু ফ্লো ভেরিয়েবল বা স্ট্রিং

<PrivateKey/Password>

<PrivateKey>
  <Password ref="private.privatekey-password"/>
</PrivateKey>

প্রয়োজন হলে, প্রাইভেট কী ডিক্রিপ্ট করার জন্য নীতিকে যে পাসওয়ার্ড ব্যবহার করতে হবে তা নির্দিষ্ট করুন। ফ্লো ভেরিয়েবলে কী পাস করতে, ref অ্যাট্রিবিউট ব্যবহার করুন। অ্যালগরিদম RS256/RS384/RS512, PS256/PS384/PS512 অথবা ES256/ES384/ES512 হলে শুধুমাত্র এটি ব্যবহার করুন।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু ফ্লো ভেরিয়েবল রেফারেন্স।

মনে রাখবেন: আপনাকে অবশ্যই ফ্লো ভেরিয়েবল নির্দিষ্ট করতে হবে। Edge, পাসওয়ার্ড প্লেনটেক্সটে উল্লেখ করা হয়েছে এমন নীতি কনফিগারেশনকে ভুল হিসেবে বাতিল করে দেবে। ফ্লো ভেরিয়েবলের প্রিফিক্স "private" হতে হবে। যেমন, private.mypassword

<PrivateKey/Value>

<PrivateKey>
  <Value ref="private.variable-name-here"/>
</PrivateKey>

JWT-তে সই করার জন্য ব্যবহৃত PEM-এনকোড করা প্রাইভেট কী নির্দিষ্ট করে। ফ্লো ভেরিয়েবলে কী পাস করাতে ref অ্যাট্রিবিউট ব্যবহার করুন। অ্যালগরিদম RS256/RS384/RS512, PS256/PS384/PS512 অথবা ES256/ES384/ES512 হলে তবেই ব্যবহার করুন।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি RS256 অ্যালগরিদম ব্যবহার করে JWT তৈরি করতে হবে।
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু PEM-এনকোড করা RSA প্রাইভেট কী ভ্যালু বোঝায় এমন স্ট্রিং সহ ফ্লো ভেরিয়েবল।

মনে রাখবেন: ফ্লো ভেরিয়েবেলে "private" প্রিফিক্স থাকতে হবে। যেমন, private.mykey

<SecretKey/Id>

<SecretKey>
  <Id ref="flow-variable-name-here"/>
</SecretKey>

or

<SecretKey>
  <Id>your-id-value-here</Id>
</SecretKey>

HMAC অ্যালগরিদম দিয়ে সাইন করা JWT-এর JWT হেডারে অন্তর্ভুক্ত করার জন্য কী আইডি (kid) নির্দিষ্ট করে। অ্যালগরিদম HS256/HS384/HS512 হলে তবেই ব্যবহার করুন।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু ফ্লো ভেরিয়েবল বা স্ট্রিং

<SecretKey/Value>

<SecretKey>
  <Value ref="private.your-variable-name"/>
</SecretKey>

HMAC অ্যালগরিদম ব্যবহার করে টোকেন যাচাই বা সাইন করার জন্য ব্যবহৃত সিক্রেট কী প্রদান করে। অ্যালগরিদম HS256/HS384/HS512 হলে, শুধুমাত্র ব্যবহার করুন। ফ্লো ভেরিয়েবলে কী পাস করাতে, ref অ্যাট্রিবিউট ব্যবহার করুন।

HS256/HS384/HS512 অ্যালগরিদমের জন্য Edge ন্যূনতম কী শক্তি প্রয়োগ করে। HS256-এর জন্য ন্যূনতম কীয়ের দৈর্ঘ্য ৩২ বাইট, HS384-এর জন্য ৪৮ বাইট এবং HS512-এর জন্য ৬৪ বাইট। কম শক্তির কী ব্যবহার করলে রানটাইম সংক্রান্ত সমস্যা হয়।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি HMAC অ্যালগরিদমের জন্য প্রয়োজন।
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু স্ট্রিংয়ের রেফারেন্স সহ ফ্লো ভেরিয়েবল

মনে রাখবেন: এটি ফ্লো ভেরিয়েবল হলে, এর আগে "private" প্রিফিক্স থাকতে হবে। যেমন, private.mysecret

<Subject>

<Subject>subject-string-here</Subject>
অথবা
<Subject ref="flow_variable" />

যেমন:

<Subject ref="apigee.developer.email"/>

নীতিটি একটি JWT তৈরি করে যাতে নির্দিষ্ট মান হিসেবে সেট করা sub দাবি থাকে।এই দাবিটি JWT-এর বিষয়কে শনাক্ত করে বা সেটির ব্যাপারে বিবৃতি দেয়। এটি RFC7519-এ উল্লেখ করা দাবিগুলির স্ট্যান্ডার্ড সেটের মধ্যে একটি।

ডিফল্ট প্রযোজ্য নয়
উপস্থিতি ঐচ্ছিক
টাইপ করুন স্ট্রিং
সঠিক ভ্যালু কোনও ভ্যালু যা কোনও সাবজেক্ট বা ফ্লো ভেরিয়েবলকে অনন্যভাবে শনাক্ত করে এবং কোনও ভ্যালুকে রেফার করে।

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

Generate JWT নীতি ফ্লো ভেরিয়েবল সেট করে না।

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

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

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

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

সমস্যার কোড HTTP স্ট্যাটাস এটি তখন ঘটে যখন
steps.jwt.AlgorithmInTokenNotPresentInConfiguration 401 যাচাইকরণ নীতিতে একাধিক অ্যালগরিদম থাকলে এটি ঘটে।
steps.jwt.AlgorithmMismatch 401 জেনারেট নীতিতে উল্লেখ করা অ্যালগরিদমটি যাচাই নীতিতে প্রত্যাশিত অ্যালগরিদমের সাথে ম্যাচ করেনি। উল্লেখ করা অ্যালগরিদম মিলতে হবে।
steps.jwt.FailedToDecode 401 নীতিটি JWT ডিকোড করতে পারেনি। JWT সম্ভবত খারাপ হয়ে গেছে।
steps.jwt.GenerationFailed 401 নীতিটি JWT তৈরি করতে পারেনি।
steps.jwt.InsufficientKeyLength 401 HS256 অ্যালগরিদমের জন্য ৩২ বাইটের কম, HS386 অ্যালগরিদমের জন্য ৪৮ বাইটের কম এবং HS512 অ্যালগরিদমের জন্য ৬৪ বাইটের কম কী।
steps.jwt.InvalidClaim 401 দাবি না থাকা বা দাবি না মেলা অথবা হেডার না থাকা বা হেডার না মেলা।
steps.jwt.InvalidCurve 401 কী দ্বারা নির্দিষ্ট করা কার্ভটি উপবৃত্তাকার কার্ভ অ্যালগরিদমের জন্য সঠিক নয়।
steps.jwt.InvalidJsonFormat 401 হেডার বা পেলোডে ভুল JSON পাওয়া গেছে।
steps.jwt.InvalidToken 401 JWT স্বাক্ষর যাচাইকরণ ব্যর্থ হলে এই সমস্যা হয়।
steps.jwt.JwtAudienceMismatch 401 টোকেন যাচাইকরণের সময় অডিয়েন্স দাবি করা যায়নি।
steps.jwt.JwtIssuerMismatch 401 টোকেন যাচাই করার সময় ইস্যুকারী দাবিটি সফল হয়নি।
steps.jwt.JwtSubjectMismatch 401 টোকেন যাচাইকরণের সময় সাবজেক্ট দাবিটি সফল হয়নি।
steps.jwt.KeyIdMissing 401 যাচাইকরণ নীতি পাবলিক কীয়ের সোর্স হিসেবে JWKS ব্যবহার করে, কিন্তু স্বাক্ষরিত JWT-তে হেডারে kid প্রপার্টি অন্তর্ভুক্ত থাকে না।
steps.jwt.KeyParsingFailed 401 প্রদত্ত কী সংক্রান্ত তথ্য থেকে সর্বজনীন কী পার্স করা যায়নি।
steps.jwt.NoAlgorithmFoundInHeader 401 JWT-তে কোনও অ্যালগরিদম হেডার না থাকলে এটি ঘটে।
steps.jwt.NoMatchingPublicKey 401 যাচাইকরণ নীতি পাবলিক কীয়ের সোর্স হিসেবে JWKS ব্যবহার করে, কিন্তু kid স্বাক্ষরিত JWT-তে JWKS তালিকাভুক্ত নয়।
steps.jwt.SigningFailed 401 GenerateJWT-তে, HS384 বা HS512 অ্যালগরিদমের জন্য ন্যূনতম সাইজের চেয়ে ছোট কী
steps.jwt.TokenExpired 401 নীতিটি মেয়াদ শেষ হয়ে যাওয়া টোকেন যাচাই করার চেষ্টা করে।
steps.jwt.TokenNotYetValid 401 টোকেনটি এখনও বৈধ নয়।
steps.jwt.UnhandledCriticalHeader 401 Verify JWT নীতি দ্বারা crit হেডারে পাওয়া হেডারটি KnownHeaders-এ তালিকাভুক্ত নেই।
steps.jwt.UnknownException 401 অজানা ব্যতিক্রম ঘটেছে।
steps.jwt.WrongKeyType 401 ভুল ধরনের কী উল্লেখ করা হয়েছে। যেমন, আপনি যদি কোনও উপবৃত্তাকার কার্ভ অ্যালগরিদমের জন্য RSA কী বা RSA অ্যালগরিদমের জন্য কার্ভ কী নির্দিষ্ট করেন।

ডিপ্লয়মেন্ট সংক্রান্ত সমস্যা

এই নীতি থাকা কোনও প্রক্সি আপনি প্রয়োগ করলে, এই সমস্যা হতে পারে।

সমস্যার নাম কারণ এর সমাধান করুন
InvalidNameForAdditionalClaim <AdditionalClaims> এলিমেন্টের চাইল্ড এলিমেন্টে <Claim> ব্যবহৃত দাবিটি নিম্নলিখিত রেজিস্টার করা নামের মধ্যে একটি হলে, ডিপ্লয়মেন্ট ব্যর্থ হবে: kid, iss, sub, aud, iat, exp, nbf, বা jti.
InvalidTypeForAdditionalClaim <AdditionalClaims> এলিমেন্টের চাইল্ড এলিমেন্ট <Claim>-এ ব্যবহৃত দাবিটি string, number, boolean বা map ধরনের না হলে, ডেপ্লয়মেন্ট ব্যর্থ হবে।
MissingNameForAdditionalClaim <AdditionalClaims> এলিমেন্টের চাইল্ড এলিমেন্ট <Claim> -এ দাবির নাম উল্লেখ করা না থাকলে, ডিপ্লয়মেন্ট সম্পূর্ণ হবে না।
InvalidNameForAdditionalHeader <AdditionalClaims> এলিমেন্টের চাইল্ড এলিমেন্টে <Claim> ব্যবহৃত দাবিটির নাম alg বা typ হলে এই সমস্যা হয়।
InvalidTypeForAdditionalHeader <AdditionalClaims> এলিমেন্টের <Claim> চাইল্ড এলিমেন্টে ব্যবহৃত দাবির ধরন string, number, boolean বা map ধরনের না হলে, ডেপ্লয়মেন্ট সফল হবে না।
InvalidValueOfArrayAttribute <AdditionalClaims> এলিমেন্টের চাইল্ড এলিমেন্ট <Claim>-এর মধ্যে থাকা অ্যারে অ্যাট্রিবিউটের ভ্যালু true বা false হিসেবে সেট করা না থাকলে এই সমস্যা হয়।
InvalidConfigurationForActionAndAlgorithm HS ফ্যামিলি অ্যালগরিদমের সাথে <PrivateKey> এলিমেন্ট ব্যবহার করা হলে অথবা RSA ফ্যামিলি অ্যালগরিদমের সাথে <SecretKey> এলিমেন্ট ব্যবহার করা হলে, ডেপ্লয়মেন্ট কাজ করবে না।
InvalidValueForElement <Algorithm> এলিমেন্টে উল্লেখ করা মান ব্যবহারযোগ্য না হলে, ডেপ্লয়মেন্ট সফল হবে না।
MissingConfigurationElement <PrivateKey> এলিমেন্ট RSA ফ্যামিলি অ্যালগরিদম অথবা <SecretKey> এলিমেন্ট HS ফ্যামিলি অ্যালগরিদমের সাথে ব্যবহার করা না হলে এই সমস্যা হবে।
InvalidKeyConfiguration <PrivateKey> বা <SecretKey> এলিমেন্টে চাইল্ড এলিমেন্ট <Value> নির্দিষ্ট করা না থাকলে, ডেপ্লয়মেন্ট সম্পূর্ণ হবে না।
EmptyElementForKeyConfiguration <Value> চাইল্ড এলিমেন্টের ref অ্যাট্রিবিউট <PrivateKey> বা <SecretKey> এলিমেন্ট খালি বা অনির্দিষ্ট হলে, ডেপ্লয়মেন্ট ব্যর্থ হবে।
InvalidVariableNameForSecret <PrivateKey> বা <SecretKey> এলিমেন্টের চাইল্ড এলিমেন্টের <Value> ref অ্যাট্রিবিউটে উল্লেখ করা ফ্লো ভেরিয়েবলের নামে (private.) প্রাইভেট প্রিফিক্স না থাকলে এই সমস্যা হয়।
InvalidSecretInConfig <PrivateKey> বা <SecretKey> এলিমেন্টের চাইল্ড এলিমেন্ট <Value>-এ ব্যক্তিগত প্রিফিক্স (private.) না থাকলে এই সমস্যা হয়।
InvalidTimeFormat <NotBefore> এলিমেন্টে উল্লেখ করা ভ্যালু সঠিক ফর্ম্যাটে না থাকলে, ডেপ্লয়মেন্ট সম্পূর্ণ হবে না।

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

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

ভেরিয়েবল যেখানে উদাহরণ
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>