প্রমাণীকরণ: JWT ব্যবহার বনাম সেশন


122

প্রমাণীকরণের মতো পরিস্থিতিতে সেশন ওভার JWT ব্যবহার করার সুবিধা কী?

এটি কি স্বতন্ত্র পদ্ধতি হিসাবে ব্যবহৃত হয় বা এটি অধিবেশনটিতে ব্যবহৃত হয়?

উত্তর:


213

প্রতি মন্তব্য "সেশন" ব্যবহার করে জেডাব্লুটিটির কোনও লাভ নেই। জেডব্লিউটি সার্ভারে এটি করার পরে ক্লায়েন্টের সেশন স্টেট বজায় রাখার একটি উপায় সরবরাহ করে।

এটি জিজ্ঞাসা করার সময় লোকেরা প্রায়শই যা বোঝায় তা হ'ল " সার্ভার-সাইড সেশন ব্যবহার করে জেডাব্লুটিটি ব্যবহারের সুবিধা কী "

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

একটি মেমরির সমাধান সহ আপনি আপনার অনুভূমিক স্কেলিং সীমাবদ্ধ করেন এবং সেশনগুলি নেটওয়ার্ক ইস্যু দ্বারা প্রভাবিত হবে (ক্লায়েন্টস ওয়াইফাই এবং মোবাইল ডেটা, সার্ভার রিবুটিং ইত্যাদির মধ্যে রোমিং)

অধিবেশনটিকে ক্লায়েন্টে স্থানান্তরিত করার অর্থ আপনি কোনও সার্ভার-সাইড সেশনের উপর নির্ভরতা সরিয়ে ফেলেন তবে এটি চ্যালেঞ্জগুলির নিজস্ব সেট চাপিয়ে দেয়।

  • সুরক্ষিতভাবে টোকেন সংরক্ষণ করা
  • নিরাপদে এটি পরিবহন
  • JWTs সেশনগুলি কখনও কখনও অবৈধ করা শক্ত হতে পারে।
  • ক্লায়েন্টের দাবির উপর আস্থা রেখে।

এই সমস্যাগুলি JWTs এবং অন্যান্য ক্লায়েন্ট-সাইড সেশন মেকানিজমগুলি দ্বারা ভাগ করে নেওয়া হয়।

জেডাব্লুটি বিশেষত এগুলির শেষ ঠিকানাগুলি। এটি JWT কী তা বুঝতে সাহায্য করতে পারে:

এটি কিছুটা তথ্য। ব্যবহারকারীর সেশনের জন্য আপনি ব্যবহারকারীর নাম এবং টোকেনের মেয়াদ শেষ হওয়ার সময় অন্তর্ভুক্ত করতে পারেন। তবে এটি অনুমিতভাবে কিছু হতে পারে, এমনকি সেশন আইডি বা ব্যবহারকারীর সম্পূর্ণ প্রোফাইলও। (তবে দয়া করে এটি করবেন না) এটি একটি সুরক্ষিত স্বাক্ষর পেয়েছে যা দূষিত পক্ষগুলিকে নকল টোকেন তৈরি করা থেকে বিরত করে (তাদের সাইন করতে আপনার সার্ভারের ব্যক্তিগত কীতে অ্যাক্সেস দরকার এবং আপনি স্বাক্ষর করতে পারেন যে তারা স্বাক্ষরিত হওয়ার পরেও তাদের পরিবর্তন করা হয়নি) আপনি প্রতিটি অনুরোধের সাথে তাদের প্রেরণ করুন, ঠিক যেমন কোনও কুকি বা Authorizationশিরক পাঠানো হবে। আসলে এগুলি সাধারণত HTTP Authorizationশিরোনামে প্রেরণ করা হয় তবে একটি কুকি ব্যবহার করা ভাল।

টোকেন স্বাক্ষরিত এবং তাই সার্ভারটি এর উত্স যাচাই করতে পারে। আমরা ধরে নেব যে সার্ভারটি সুরক্ষিতভাবে সাইন ইন করার নিজস্ব ক্ষমতার উপর ভরসা করে (আপনার একটি স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করা উচিত: এটি নিজেই করার চেষ্টা করবেন না এবং সার্ভারটি সঠিকভাবে সুরক্ষিত করবেন)

সুরক্ষিতভাবে টোকন পরিবহনের বিষয়ে ইস্যুতে উত্তরটি সাধারণত কোনও এনক্রিপ্ট করা চ্যানেল, সাধারণত HTS- র মাধ্যমে প্রেরণ করা হয়।

ক্লায়েন্টে সুরক্ষিতভাবে টোকেন সংরক্ষণ করার বিষয়ে, আপনাকে অবশ্যই এটি নিশ্চিত করতে হবে যে খারাপ লোকেরা এটি পেতে না পারে। এর (বেশিরভাগ) এর অর্থ জেএসকে খারাপ ওয়েবসাইটগুলি থেকে টোকেনটি তাদের কাছে ফেরত পাঠাতে বাধা দেওয়া। অন্যান্য ধরণের এক্সএসএস আক্রমণকে প্রশমিত করতে ব্যবহৃত একই কৌশল ব্যবহার করে এটি প্রশমিত করা হয়।

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

জেডাব্লুটি টোকেন ব্যবহারের অন্য একটি সুবিধা হ'ল সম্ভবত আপনি যে ভাষায় এটি আশা করতে পারেন প্রতিটি ভাষায় উপলব্ধ গ্রন্থাগার ব্যবহার করে তা প্রয়োগ করা যুক্তিসঙ্গতভাবে সহজ। এটি আপনার প্রাথমিক ব্যবহারকারী প্রমাণীকরণ প্রকল্প থেকে সম্পূর্ণ বিবাহবিচ্ছেদ হয়েছে - আপনি যদি আঙুলের মুদ্রণ ভিত্তিক সিস্টেমে যান তবে আপনার সেশন ম্যানেজমেন্ট স্কিমে কোনও পরিবর্তন করার দরকার নেই।

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

সংক্ষেপে: জেডাব্লুটিটি অন্যান্য সেশন কৌশলগুলির কিছু প্রশ্ন এবং ত্রুটিগুলির উত্তর দেয় answers

  1. "সস্তা" প্রমাণীকরণ কারণ আপনি একটি ডিবি রাউন্ড ট্রিপটি মুছে ফেলতে পারেন (বা কমপক্ষে কোয়েরির জন্য আরও অনেক ছোট টেবিল থাকতে পারে!) যার ফলে অনুভূমিক স্কেলিবিলিটি সক্ষম হয়।
  2. টেম্পার-প্রুফ ক্লায়েন্ট-পক্ষের দাবি।

জেডব্লিউটিগুলি নিরাপদ সঞ্চয়স্থান বা পরিবহণের মতো অন্যান্য সমস্যার উত্তর দেয় না, তবে এটি কোনও নতুন সুরক্ষা সমস্যা প্রবর্তন করে না।

জেডাব্লুটিটির চারপাশে প্রচুর নেতিবাচকতা বিদ্যমান তবে আপনি যদি অন্য ধরণের প্রমাণীকরণের জন্য একই সুরক্ষাটি প্রয়োগ করেন তবে আপনি ভাল হয়ে যাবেন be

একটি চূড়ান্ত নোট: এটি কুকিজ বনাম টোকেন নয়। কুকিজ হ'ল তথ্য বিট সংরক্ষণ এবং পরিবহনের একটি প্রক্রিয়া এবং জেডাব্লুটি টোকেনগুলি সংরক্ষণ ও পরিবহনেও ব্যবহার করা যেতে পারে।


4
এটি লক্ষণীয় যে সার্ভার-সাইড সেশনগুলিতে সার্ভারে কোনও তথ্য সংরক্ষণ করার দরকার নেই। সার্ভারটি ক্লাব ক্লায়েন্টটিকে স্টোর হিসাবে JWT এর মতো ব্যবহার করতে পারে। আসল পার্থক্যটি হ'ল 1) কুকি শিরোলেখ ব্যতীত অনুরোধ শিরোনাম হিসাবে মানটি পাস করে ব্রাউজার সুরক্ষা বিধিগুলি এড়ানো এবং 2) জেডাব্লুটিটির সাথে মানক বিন্যাস থাকা।
শিওনক্রস

1
আপনি কি বলবেন যে স্থানীয় স্টোরেজটিতে একটি jwt সংরক্ষণ করা নিরাপদ? যদি তা না হয় তবে এটি সংরক্ষণের নিরাপদ জায়গা কোথায় যাতে ব্যবহারকারী লগইন থাকেন?
জেসিকা

1
হ্যাঁ স্থানীয় স্টোরেজ সাধারণত এটি ক্লায়েন্টের পাশে সঞ্চয় করার সবচেয়ে সঠিক জায়গা। আপনাকে এক্সএসএসের সাথে কাজ করার দরকার আছে - আমি কোনও ওয়েব প্রোগ্রামিং বিশেষজ্ঞ নই তবে এই উত্তরটি দেখুন stackoverflow.com/a/40376819/1810447 এবং "কীভাবে এক্সএসএসের বিরুদ্ধে সুরক্ষা দিতে হবে" অনুসন্ধান করুন
দ্য তাহান

1
আপনার মন্তব্যে আপনি ক্যাশে ভিত্তিক সমাধান + সেশন টোকেন সম্পর্কে কথা বলবেন না। এটি আমার কাছে জেডব্লিউটি + "নিহত টোকেন" টেবিলের চেয়ে "ভাল" বলে মনে হচ্ছে, কারণ এই "নিহত টোকেন" টেবিলের সাথে আপনার যে কোনও উপায়ে ডিবি অ্যাক্সেসের দরকার আছে, আপনার সেশন + ক্যাশেও থাকবে (এটিও ছোট)। এবং জেডব্লিউটি স্থির থাকা অধিবেশনগুলির চেয়ে প্রয়োগ করা আরও বেদনাদায়ক, কারণ আপনাকে রিফ্রেশ_ টোকেনের সাথে খেলতে হবে (সুতরাং দুটি টোকেন বজায় রাখতে হবে) ... কোনও মন্তব্য সত্যিই প্রশংসিত হবে ... বিশেষত যদি আপনার কাছে JWT + কীভাবে দেখানোর জন্য কিছু নম্বর থাকে কিল_ট্যাবল সেশন + ক্যাশে ;-)
টোবিয়াস বোরা

2
@ থাহান লোকালস্টোরেজ জেডাব্লুটিটি সংরক্ষণ করার প্রস্তাব দেওয়া হয় না। আপনি যে লিঙ্কটি ভাগ করেছেন সেটিও উল্লেখ করেছে। জেডাব্লুটিটি কেন লোকাল স্টোরেজে সংরক্ষণ করা উচিত নয় সে সম্পর্কে এই ব্লগটির ভাল ব্যাখ্যা রয়েছে।
হার্কে

40

সংক্ষিপ্ত উত্তরটি: কোনওটি নয়।

একটি দীর্ঘ সংস্করণ হ'ল:

আমি এই সুপারিশ পড়ার পর অধিবেশন পরিচালনার জন্য JWTs বাস্তবায়িত GraphQL ডক্স :

আপনি যদি এই কোনও প্রমাণীকরণ ব্যবস্থার সাথে পরিচিত না হন তবে আমরা এক্সপ্রেস-জেভিউটি ব্যবহার করার পরামর্শ দিচ্ছি কারণ এটি ভবিষ্যতের কোনও নমনীয়তা ছাড়াই সহজ।

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

সেশনের জন্য JWT ব্যবহার বন্ধ করুন T


0

আমার দুটি সেন্ট, যা পথে joepie91 এর বিখ্যাত ব্লগ পোস্টের সাথে কিছু বিপরীত যুক্ত করে।

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

প্রক্রিয়াজাতকরণ
একটি সেশন স্টোর চালানো 24/7 অর্থ ব্যয় করে।
K8S বিশ্বে মেমরি ভিত্তিক সমাধানগুলি নিয়ে আপনি দূরে সরে যেতে পারবেন না, কারণ পোঁদগুলি সাময়িক আকারের।
স্টিকি সেশনগুলি ঠিক একই কারণে ভাল ভাবেনা।

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

I / O
কিছু মেঘ সরবরাহকারী ডিস্ক সম্পর্কিত I / O এর জন্য অর্থ গ্রহণ করে।

ব্যান্ডউইথ
কিছু ক্লাউড সরবরাহকারী সার্ভারের উদাহরণগুলির মধ্যে নেটওয়ার্ক ক্রিয়াকলাপের জন্য চার্জ করে।
এটি প্রায়শই নিশ্চিত যেহেতু এপিআই এবং সেশন স্টোরটি পৃথক দৃষ্টান্ত ances

সেশন স্টোরকে ক্লাস্টারিং
ব্যয় আরও পূর্বের সমস্ত ব্যয় আরও বাড়িয়ে তোলে।


"আপনি K8S বিশ্বে মেমরি ভিত্তিক সমাধানগুলি দিয়ে দূরে সরে যেতে পারবেন না, কারণ পোডগুলি ক্ষণিকের সংক্ষিপ্ত আকারের" আপনি কী বোঝাতে চাইছেন তা নিশ্চিত নয়। রেডিস অবশ্যই একটি কে 8 এস পরিবেশে কাজ করে এবং আপনার ব্যবহারকারীদের প্রভাবিত করতে রেডিস পোড প্রায়শই ব্যর্থ হয় যা খুব অসম্ভব বলে মনে হয়।
শান্তকনটেস্ট

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

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

@ ক্যুইটকনটেস্ট ধারাবাহিকভাবে বা একবারে আজীবন ইভেন্টে এই দিকটি আমার কাছে একই। অর্থাত্ একটি ভাল অবস্থিত ডিডোএস আক্রমণ সার্ভারকে "ব্যবহারকারীদের লগ আউট" করতে পারে। এটি সফ্টওয়্যারটির নির্ভরযোগ্যতার খ্যাতির জন্য ভাল করে না। আমি মনে করি যে কোনওভাবেই সেশন ম্যানেজমেন্টের জন্য রেডিস অতিমাত্রায়। এটির জন্য ব্যয় হয় এবং এটি পরিমাপ করা প্রয়োজন, অন্যদিকে (নিরাপদে) কোনও কুকিতে জেডাব্লুটিটি সংরক্ষণ করা হয় না।
আইয়াল পেরি

1
@ কুইটকনটেস্ট আপনার ইনপুট জন্য ধন্যবাদ, আলোচনার ভালবাসা!
ইয়াল পেরি

0

আমি ব্যবহারকারীর প্রমাণীকরণের জন্য জেডাব্লুটি এবং টোকেন + ক্যাশেয়ের মধ্যে একটি অনুরূপ প্রশ্ন চয়ন করেছি।

এই নিবন্ধগুলি পড়ার পরে, আমার কাছে এটি স্পষ্টভাবে স্পষ্ট যে JWT প্রতিশ্রুতিগুলি যে সমস্যাগুলি নিয়ে আসে সেগুলি ছাড়িয়ে যায় না। সুতরাং টোকেন + ক্যাশে (রেডিস / মেমক্যাচ) আমার পক্ষে যাওয়ার উপায়।

অথ শিরোনাম বনাম জেডাব্লুটি বনাম সেশনস - কীভাবে এপিআই-র জন্য রাইট আথ টেকনিক নির্বাচন করতে হয়

APIs এর জন্য প্রমাণীকরণ কৌশলসমূহ

সেশনের জন্য jwt ব্যবহার বন্ধ করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.