আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান । তথ্য
এই বিষয় JWT (JSON ওয়েব টোকেন) এবং JWS (JSON ওয়েব স্বাক্ষর) এবং Apigee JWS/JWT নীতিগুলি সম্পর্কে সাধারণ তথ্য প্রদান করে যা Apigee প্রক্সি ডেভেলপারদের আগ্রহের হতে পারে।
ভূমিকা
JWS এবং JWT উভয়ই সাধারণত সংযুক্ত অ্যাপ্লিকেশনগুলির মধ্যে দাবি বা দাবী শেয়ার করতে ব্যবহৃত হয়। JWS/JWT নীতিগুলি এজ এপিআই প্রক্সিগুলিকে সক্ষম করে:
- একটি স্বাক্ষরিত JWT বা JWS তৈরি করুন ।
- JWS/JWT-এর মধ্যে স্বাক্ষরিত JWT বা JWS এবং দাবিগুলি যাচাই করুন ।
- স্বাক্ষর যাচাই না করে একটি স্বাক্ষরিত JWT বা JWS ডিকোড করুন ।
পরবর্তী দুটি ক্ষেত্রে, নীতিটি এমন ভেরিয়েবলও সেট করে যা অতিরিক্ত নীতিগুলি বা ব্যাকএন্ড পরিষেবাগুলিকে বৈধ দাবিগুলি পরিদর্শন করতে এবং সেই দাবিগুলির উপর ভিত্তি করে সিদ্ধান্ত নেওয়ার অনুমতি দেয়৷
যাচাই JWS/JWT নীতি ব্যবহার করার সময়, একটি অবৈধ JWS/JWT প্রত্যাখ্যান করা হবে এবং এর ফলে একটি ত্রুটির অবস্থা হবে। একইভাবে, ডিকোড JWS/JWT নীতি ব্যবহার করার সময়, একটি বিকৃত JWS/JWT একটি ত্রুটির অবস্থার কারণ হবে।
ভিডিও
JWT-এর দ্রুত পরিচয়ের জন্য একটি ছোট ভিডিও দেখুন। যদিও এই ভিডিওটি একটি JWT তৈরি করার জন্য নির্দিষ্ট, তবে অনেক ধারণা JWS-এর জন্য একই।
JWT কাঠামো সম্পর্কে আরও জানতে কী একটি ছোট ভিডিও।
কেস ব্যবহার করুন
আপনি JWS/JWT নীতিগুলি ব্যবহার করতে পারেন:
- একটি এজ প্রক্সির প্রক্সি বা টার্গেট এন্ডপয়েন্ট সাইডে একটি নতুন JWS/JWT তৈরি করুন। উদাহরণস্বরূপ, আপনি একটি প্রক্সি অনুরোধ প্রবাহ তৈরি করতে পারেন যা একটি JWS/JWT তৈরি করে এবং এটি একটি ক্লায়েন্টকে ফেরত দেয়। অথবা, আপনি একটি প্রক্সি ডিজাইন করতে পারেন যাতে এটি লক্ষ্য অনুরোধের প্রবাহে একটি JWS/JWT তৈরি করে এবং লক্ষ্যে পাঠানো অনুরোধের সাথে এটি সংযুক্ত করে। সেই দাবিগুলি আরও সুরক্ষা প্রক্রিয়াকরণ প্রয়োগ করতে ব্যাকএন্ড পরিষেবাগুলি সক্ষম করার জন্য উপলব্ধ হবে৷
- ইনবাউন্ড ক্লায়েন্ট অনুরোধ থেকে প্রাপ্ত একটি JWS/JWT থেকে দাবি যাচাই করুন এবং নিষ্কাশন করুন, লক্ষ্য পরিষেবার প্রতিক্রিয়া থেকে, পরিষেবা কলআউট নীতির প্রতিক্রিয়াগুলি থেকে বা অন্যান্য উত্স থেকে। এজ একটি JWS/JWT-এ স্বাক্ষর যাচাই করবে, JWS/JWT কোনো তৃতীয় পক্ষের দ্বারা তৈরি করা হয়েছে, অথবা Edge নিজেই, RSA বা HMAC অ্যালগরিদম ব্যবহার করে।
- একটি JWS/JWT ডিকোড করুন। যাচাই JWS/JWT নীতির সাথে কনসার্টে ব্যবহার করার সময় ডিকোডিং সবচেয়ে কার্যকর, যখন JWS/JWT যাচাই করার আগে JWS/JWT-এর মধ্যে থেকে একটি দাবি (JWT) বা শিরোনাম (JWS/JWT) এর মান অবশ্যই জানতে হবে।
একটি JWS/JWT এর অংশ
একটি স্বাক্ষরিত JWS/JWT পিরিয়ড দ্বারা পৃথক তিনটি অংশে তথ্য এনকোড করে: হেডার, পেলোড এবং স্বাক্ষর:
header.payload.signature
- জেনারেট JWS/JWT নীতি তিনটি অংশ তৈরি করে।
- যাচাই JWS/JWT নীতি তিনটি অংশই পরীক্ষা করে।
- ডিকোড JWS/JWT নীতি শুধুমাত্র হেডার এবং পেলোড পরীক্ষা করে।
একটি JWS একটি বিচ্ছিন্ন বিন্যাসকে সমর্থন করে যা JWS থেকে পেলোড বাদ দেয়:
header..signature
একটি বিচ্ছিন্ন JWS সহ, পেলোড JWS থেকে আলাদাভাবে পাঠানো হয়। আপনি কাঁচা, আনকোডড JWS পেলোড নির্দিষ্ট করতে যাচাই JWS নীতির <DetachedContent>
উপাদান ব্যবহার করেন। JWS যাচাইকরণ নীতি তারপর JWS-এ হেডার এবং স্বাক্ষর ব্যবহার করে এবং <DetachedContent>
উপাদান দ্বারা নির্দিষ্ট করা পেলোড ব্যবহার করে JWS যাচাই করে।
টোকেন সম্পর্কে আরও জানতে এবং কীভাবে সেগুলি এনকোড এবং স্বাক্ষরিত হয়, দেখুন:
- JWT : IETF RFC7519
- JWS : IETF RFC7515
JWS এবং JWT এর মধ্যে পার্থক্য
সংযুক্ত অ্যাপ্লিকেশনগুলির মধ্যে দাবি বা দাবিগুলি ভাগ করতে আপনি JWT বা JWS ব্যবহার করতে পারেন। দুটির মধ্যে প্রধান পার্থক্য হল পেলোডের উপস্থাপনা:
- জেডব্লিউটি
- পেলোড সবসময় একটি JSON অবজেক্ট
- পেলোড সবসময় JWT এর সাথে সংযুক্ত থাকে
- টোকেনের
typ
হেডার সবসময়JWT
তে সেট করা থাকে
- জেডব্লিউএস
- পেলোড যে কোনো বিন্যাস দ্বারা প্রতিনিধিত্ব করা যেতে পারে, যেমন একটি JSON অবজেক্ট, বাইট স্ট্রীম, অক্টেট স্ট্রীম এবং অন্যান্য
- পেলোড JWS এর সাথে সংযুক্ত করতে হবে না
যেহেতু JWT ফরম্যাট সর্বদা পেলোডের প্রতিনিধিত্ব করতে একটি JSON অবজেক্ট ব্যবহার করে, তাই এজ জেনারেট JWT এবং JWT যাচাই নীতিগুলি সাধারণ নিবন্ধিত দাবির নামগুলি যেমন aud , iss , sub , এবং অন্যান্যগুলি পরিচালনা করার জন্য সমর্থনে তৈরি করেছে৷ এর অর্থ হল আপনি পেলোডে এই দাবিগুলি সেট করতে জেনারেট জেডব্লিউটি নীতির উপাদানগুলি এবং তাদের মানগুলি যাচাই করার জন্য যাচাই JWT নীতির উপাদানগুলি ব্যবহার করতে পারেন৷ আরও জানতে JWT স্পেসিফিকেশনের নিবন্ধিত দাবির নাম বিভাগটি দেখুন।
নির্দিষ্ট কিছু নিবন্ধিত দাবির নাম সমর্থন করার পাশাপাশি, জেনারেট জেডব্লিউটি নীতি JWT-তে নির্বিচারে নাম সহ দাবি যোগ করাকে সরাসরি সমর্থন করে। প্রতিটি দাবি একটি সাধারণ নাম/মান জোড়া, যেখানে মান টাইপ নম্বর, বুলিয়ান, স্ট্রিং, মানচিত্র বা অ্যারের হতে পারে।
যেহেতু একটি JWS পেলোডের জন্য যেকোনো ডেটা উপস্থাপনা ব্যবহার করতে পারে, আপনি পেলোডে দাবি যোগ করতে পারবেন না। জেনারেট জেডব্লিউএস নীতি জেডব্লিউএস-এর শিরোনামে নির্বিচারে নাম সহ দাবি যোগ করা সমর্থন করে। এছাড়াও, JWS নীতিগুলি একটি বিচ্ছিন্ন পেলোড সমর্থন করে, যেখানে JWS পেলোড বাদ দেয়। একটি বিচ্ছিন্ন পেলোড আপনাকে JWS এবং পেলোড আলাদাভাবে পাঠাতে দেয় এবং এটি বেশ কয়েকটি নিরাপত্তা মান দ্বারা প্রয়োজনীয়।
স্বাক্ষর অ্যালগরিদম সম্পর্কে
JWS/JWT যাচাইকরণ এবং JWS/JWT জেনারেশন নীতিগুলি RSA, RSASSA-PSS, ECDSA, এবং HMAC অ্যালগরিদম সমর্থন করে, বিট শক্তি 256, 384, বা 512 এর SHA2 চেকসাম ব্যবহার করে। JWS/JWT ডিকোড নীতি অ্যালগরিদম নির্বিশেষে কাজ করে JWS/JWT স্বাক্ষর করতে ব্যবহৃত হয়।
এইচএমএসি অ্যালগরিদম
HMAC অ্যালগরিদম একটি শেয়ার করা গোপনের উপর নির্ভর করে, যা সিক্রেট কী নামে পরিচিত, স্বাক্ষর তৈরি করার জন্য (যা JWS/JWT সাইনিং নামেও পরিচিত) এবং স্বাক্ষর যাচাই করার জন্য।
গোপন কীটির সর্বনিম্ন দৈর্ঘ্য অ্যালগরিদমের বিট শক্তির উপর নির্ভর করে:
- HS256: 32 বাইট ন্যূনতম কী দৈর্ঘ্য
- HS386: 48 বাইট ন্যূনতম কী দৈর্ঘ্য
- HS512: 64 বাইট ন্যূনতম কী দৈর্ঘ্য
RSA অ্যালগরিদম
RSA অ্যালগরিদম ক্রিপ্টোগ্রাফিক স্বাক্ষরের জন্য একটি পাবলিক/প্রাইভেট কী জোড়া ব্যবহার করে। RSA স্বাক্ষর সহ, স্বাক্ষরকারী পক্ষ JWS/JWT-এ স্বাক্ষর করার জন্য একটি RSA ব্যক্তিগত কী ব্যবহার করে এবং যাচাইকারী পক্ষ JWS/JWT-এ স্বাক্ষর যাচাই করার জন্য মিলে যাওয়া RSA পাবলিক কী ব্যবহার করে। কীগুলিতে কোনও আকারের প্রয়োজনীয়তা নেই।
RSASSA-PSS অ্যালগরিদম
RSASSA-PSS অ্যালগরিদম হল RSA অ্যালগরিদমের একটি আপডেট৷ RSS এর মত, RSASSA-PSS ক্রিপ্টোগ্রাফিক স্বাক্ষরের জন্য একটি RSA পাবলিক/প্রাইভেট কী জোড়া ব্যবহার করে। কীটির বিন্যাস আরএসএসের মতোই। স্বাক্ষরকারী পক্ষ JWS/JWT-এ স্বাক্ষর করার জন্য একটি ব্যক্তিগত কী ব্যবহার করে এবং যাচাইকারী পক্ষ JWS/JWT-এ স্বাক্ষর যাচাই করার জন্য মিলে যাওয়া পাবলিক কী ব্যবহার করে। কীগুলিতে কোনও আকারের প্রয়োজনীয়তা নেই।
ECDSA অ্যালগরিদম
উপবৃত্তাকার কার্ভ ডিজিটাল সিগনেচার অ্যালগরিদম (ECDSA) অ্যালগরিদম হল একটি উপবৃত্তাকার-বক্ররেখা ক্রিপ্টোগ্রাফি অ্যালগরিদম যার একটি P-256, P-384 এবং P-521 বক্ররেখা রয়েছে। আপনি যখন ECDSA অ্যালগরিদম ব্যবহার করেন, অ্যালগরিদম আপনাকে নির্দিষ্ট করতে হবে এমন পাবলিক এবং প্রাইভেট কী প্রকার নির্ধারণ করে:
অ্যালগরিদম | বক্ররেখা | মূল প্রয়োজনীয়তা |
---|---|---|
ES256 | পি-256 | P-256 বক্ররেখা থেকে উৎপন্ন একটি কী (সেকপি256r1 বা prime256v1 নামেও পরিচিত) |
ES384 | পি-384 | P-384 বক্ররেখা থেকে উৎপন্ন একটি কী (সেকপ384r1 নামেও পরিচিত) |
ES512 | P-521 | P-521 বক্ররেখা থেকে উৎপন্ন একটি কী (সেকপি521r1 নামেও পরিচিত) |
কী এনক্রিপশন অ্যালগরিদম
JWS/JWT নীতিগুলি OpenSSL দ্বারা সমর্থিত সমস্ত মূল এনক্রিপশন অ্যালগরিদম সমর্থন করে।
একটি JWS/JWT যাচাই করতে একটি JSON ওয়েব কী সেট (JWKS) ব্যবহার করা
আপনি যখন একটি স্বাক্ষরিত JWS/JWT যাচাই করেন, তখন আপনাকে সর্বজনীন কী প্রদান করতে হবে যা টোকেন স্বাক্ষর করতে ব্যবহৃত ব্যক্তিগত কী-এর সাথে যুক্ত। আপনার কাছে JWS/JWT নীতিগুলি যাচাই করার জন্য সর্বজনীন কী প্রদানের জন্য দুটি বিকল্প রয়েছে:
- প্রকৃত সর্বজনীন কী মান ব্যবহার করুন (সাধারণত একটি ফ্লো ভেরিয়েবলে প্রদান করা হয়), অথবা
- একটি JWKS এ মোড়ানো একটি পাবলিক কী ব্যবহার করুন।
JWKS সম্পর্কে
একটি JWKS হল একটি JSON কাঠামো যা JSON ওয়েব কী (JWKs) এর একটি সেট উপস্থাপন করে। একটি JWK হল একটি JSON ডেটা কাঠামো যা একটি ক্রিপ্টোগ্রাফিক কী উপস্থাপন করে। JWK এবং JWKS RFC7517 এ বর্ণনা করা হয়েছে। পরিশিষ্ট A-তে JKWS উদাহরণ দেখুন। JSON ওয়েব কী সেটের উদাহরণ
JWKS কাঠামো
RFC7517 প্রতিটি কী ধরনের জন্য JWKS কী উপাদান বর্ণনা করে, যেমন "RSA" বা "EC"। উদাহরণস্বরূপ, কী ধরনের উপর নির্ভর করে, এই পরামিতিগুলি অন্তর্ভুক্ত করতে পারে:
- kty - কী প্রকার, যেমন "RSA" বা "EC"।
- বাচ্চা (কী আইডি) - যেকোন অবাধ মান হতে পারে (একটি কী সেটের মধ্যে কোন সদৃশ নেই)। যদি ইনবাউন্ড JWT একটি কী আইডি বহন করে যা JWKS-এর সেটে উপস্থিত থাকে, তাহলে নীতি JWS/JWT স্বাক্ষর যাচাই করতে সঠিক পাবলিক কী ব্যবহার করবে।
নীচে ঐচ্ছিক উপাদান এবং তাদের মানগুলির উদাহরণ রয়েছে:
- alg - কী অ্যালগরিদম। এটি অবশ্যই JWS/JWT-এর সাইনিং অ্যালগরিদমের সাথে মেলে।
- ব্যবহার - যদি উপস্থিত থাকে, অবশ্যই sig হতে হবে।
নিম্নলিখিত JWKS-এ প্রয়োজনীয় উপাদান এবং মান রয়েছে এবং এজ-এ বৈধ হবে ( https://www.googleapis.com/oauth2/v3/certs থেকে):
{ "keys":[ { "kty":"RSA", "alg":"RS256", "use":"sig", "kid":"ca04df587b5a7cead80abee9ea8dcf7586a78e01", "n":"iXn-WmrwLLBa-QDiToBozpu4Y4ThKdwORWFXQa9I75pKOvPUjUjE2Bk05TUSt7-V7KDjCq0_Nkd-X9rMRV5LKgCa0_F8YgI30QS3bUm9orFryrdOc65PUIVFVxIwMZuGDY1hj6HEJVWIr0CZdcgNIll06BasclckkUK4O-Eh7MaQrqb646ghFlG3zlgk9b2duHbDOq3s39ICPinRQWC6NqTYfqg7E8GN_NLY9srUCc_MswuUfMJ2cKT6edrhLuIwIj_74YGkpOwilr2VswKsvJ7dcoiJxheKYvKDKtZFkbKrWETTJSGX2Xeh0DFB0lqbKLVvqkM2lFU2Qx1OgtTnrw", "e":"AQAB" }, { "kty":"EC", "alg":"ES256", "use":"enc", "kid":"k05TUSt7-V7KDjCq0_N" "crv":"P-256", "x":"Xej56MungXuFZwmk_xccvsMpCtXmqhvEEMCmHyAmKF0", "y":"Bozpu4Y4ThKdwORWFXQa9I75pKOvPUjUjE2Bk05TUSt", } ] }
JWKS ব্যবহার করার জন্য আপনার প্রক্সি ডিজাইন করা
যখন ইস্যুকারীর কাছ থেকে JWS/JWT নেওয়া হয়, প্রায়শই ইস্যুকারী JWS/JWT হেডারে একটি কী আইডি (বা বাচ্চা) সন্নিবেশ করে। কীটি JWS/JWT-এর প্রাপককে বলে যে কীভাবে স্বাক্ষরিত JWS/JWT-এ স্বাক্ষর যাচাই করার জন্য প্রয়োজনীয় সর্বজনীন বা গোপন কী খুঁজে বের করতে হয়।
উদাহরণ হিসাবে, ধরুন একজন ইস্যুকারী একটি ব্যক্তিগত কী দিয়ে একটি JWT স্বাক্ষর করে। "কী আইডি" JWT যাচাই করার জন্য ব্যবহার করার জন্য মিলে যাওয়া পাবলিক কী চিহ্নিত করে। সর্বজনীন কীগুলির তালিকা সাধারণত কিছু সুপরিচিত এন্ডপয়েন্টে পাওয়া যায়, উদাহরণস্বরূপ: https://www.googleapis.com/oauth2/v3/certs ।
এটি হল মৌলিক ক্রম যা এজ (অথবা JWKS এর সাথে কাজ করে এমন যেকোনো প্ল্যাটফর্ম) একটি JWS/JWT এর সাথে কাজ করতে হবে যার একটি JWKS আছে:
- কী আইডি (বাচ্চা) খুঁজে পেতে JWS/JWT হেডার পরীক্ষা করুন।
- সাইনিং অ্যালগরিদম (alg), যেমন RS256 খুঁজে পেতে JWS/JWT হেডার পরীক্ষা করুন।
- একটি প্রদত্ত ইস্যুকারীর জন্য সুপরিচিত এন্ডপয়েন্টের JWKS থেকে কী এবং আইডিগুলির তালিকা পুনরুদ্ধার করুন।
- JWS/JWT শিরোনামে উল্লেখ করা কী আইডি সহ এবং ম্যাচিং অ্যালগরিদম সহ কীগুলির তালিকা থেকে সর্বজনীন কী বের করুন, যদি JWKS কী অ্যালগরিদম নির্দিষ্ট করে।
- JWS/JWT-এ স্বাক্ষর যাচাই করতে সেই পাবলিক কী ব্যবহার করুন।
এজ এপিআই প্রক্সি ডেভেলপার হিসাবে আপনাকে JWS/JWT যাচাইকরণ করতে নিম্নলিখিতগুলি করতে হবে:
- একটি প্রদত্ত ইস্যুকারীর জন্য সুপরিচিত এন্ডপয়েন্ট থেকে কী এবং আইডিগুলির তালিকা পুনরুদ্ধার করুন৷ আপনি এই পদক্ষেপের জন্য একটি পরিষেবা কলআউট নীতি ব্যবহার করতে পারেন।
- JWS/JWT যাচাই নীতিতে,
<Source>
এলিমেন্টে JWS/JWT-এর অবস্থান এবং<PublicKey/JWKS>
এলিমেন্টে JWKS পেলোড উল্লেখ করুন। উদাহরণস্বরূপ, VerifyJWT নীতির জন্য:<VerifyJWT name="JWT-Verify-RS256"> <Algorithm>RS256</Algorithm> <Source>json.jwt</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PublicKey> <JWKS ref="public.jwks"/> </PublicKey> <Subject>apigee-seattle-hatrack-montage</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> </VerifyJWT>
যাচাই JWT নীতি অন্য সবকিছু করে:
- JWT-তে দাবি করা কী আইডি (কিড) এর সাথে মেলে এমন একটি কী যদি JWKS-এ পাওয়া না যায়, তাহলে JWT যাচাই নীতি একটি ত্রুটি ছুড়ে দেয় এবং JWT-কে বৈধতা দেয় না।
- যদি ইনবাউন্ড JWT শিরোনামে একটি কী আইডি (কিড) বহন না করে, তাহলে কীআইডি-টু-ভেরিফিকেশন-কি-এর এই ম্যাপিং সম্ভব নয়।
প্রক্সি ডিজাইনার হিসাবে, আপনি কী ব্যবহার করবেন তা নির্ধারণের জন্য দায়ী; কিছু ক্ষেত্রে এটি একটি স্থির, হার্ড-কোডেড কী হতে পারে।