টোকেন-ভিত্তিক প্রমাণীকরণের জন্য JWT বনাম কুকিজ


112

আমি "জেডাব্লুটি টি বনাম কুকি" সম্পর্কে কিছু পোস্ট পড়েছি তবে তারা কেবল আমাকে আরও বিভ্রান্ত করেছে ...

  1. আমি কিছু স্পষ্টতা চাই , যখন লোকেরা "টোকেন-ভিত্তিক প্রমাণীকরণ বনাম কুকিজ" সম্পর্কে কথা বলবে, তখন এখানে কুকিগুলি কেবল সেশন কুকিজকেই বোঝায় ? আমার বোধগম্যতা হল কুকি একটি মাধ্যমের মতো , এটি টোকেন-ভিত্তিক প্রমাণীকরণ প্রয়োগ করতে ব্যবহার করা যেতে পারে ( ক্লায়েন্টের পাশে লগ-ইন করা ব্যবহারকারীকে সনাক্ত করতে পারে এমন কিছু সঞ্চয় করুন) ) বা একটি সেশন-ভিত্তিক প্রমাণীকরণ (ক্লায়েন্টের পাশে একটি ধ্রুবক সংরক্ষণ করুন) যা সার্ভারের সেশনে তথ্যের সাথে মেলে )

  2. আমাদের কেন JSON ওয়েব টোকেন দরকার ? টোকেন-ভিত্তিক প্রমাণীকরণ প্রয়োগ করার জন্য আমি স্ট্যান্ডার্ড কুকি ব্যবহার করছিলাম ( সেশন আইডি ব্যবহার না করা, সার্ভার মেমরি বা ফাইল স্টোরেজ ব্যবহার করবেন না ): Set-Cookie: user=innocent; preferred-color=azureএবং আমি কেবলমাত্র পার্থক্যটি লক্ষ্য করেছি যে জেডাব্লুটিটিতে পে- লোড এবং স্বাক্ষর উভয়ই রয়েছে ... যেখানে আপনি বেছে নিতে পারেন HTTP শিরোলেখের জন্য স্বাক্ষরযুক্ত বা প্লেইনটেক্সট কুকির মধ্যে between আমার মতে স্বাক্ষরিত কুকি ( cookie:'time=s%3A1464743488946.WvSJxbCspOG3aiGi4zCMMR9yBdvS%2B6Ob2f3OG6%2FYCJM') আরও স্পেস দক্ষ, একমাত্র ব্যর্থতা হ'ল ক্লায়েন্ট টোকেনটি পড়তে পারে না, কেবল সার্ভারই ​​পারে ... তবে আমি মনে করি এটি ঠিক আছে কারণ জেডব্লিউটি-তে দাবি যেমন optionচ্ছিক, টোকেনের জন্য এটি প্রয়োজনীয় নয় অর্থপূর্ণ হতে

উত্তর:


165

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

এই বৈশিষ্ট্যটি কুকিগুলিকে ওয়েবসাইটগুলি সুরক্ষিত করার জন্য একটি ভাল উপায় হিসাবে তৈরি করে, যেখানে কোনও ব্যবহারকারী লিংক ব্যবহার করে পৃষ্ঠাগুলির মধ্যে লগ ইন করে।

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

ধরুন https: //www.example.com- এ থাকা ওয়েব সাইটটি ব্যবহারকারীর নাম বা পুরাতন পাসওয়ার্ড পোস্ট করার প্রয়োজন ছাড়াই https://www.example.com/changepasswordPOST এ নতুন পাসওয়ার্ড-এ-র দ্বারা অনুমোদনপ্রাপ্ত ব্যবহারকারীদের তাদের পাসওয়ার্ড পরিবর্তন করার অনুমতি দেয় ।

আপনি যদি এখনও সেই ওয়েবসাইটটিতে লগইন করেন যখন আপনি কোনও দূষিত ওয়েবসাইট ভিজিট করেন যা আপনার ব্রাউজারে এমন কোনও পৃষ্ঠা লোড করে যা সেই ঠিকানায় একটি পোস্ট পোস্ট করে, আপনার ব্রাউজারটি বিশ্বস্ততার সাথে প্রমাণীকরণ কুকিজ সংযুক্ত করবে, আক্রমণকারীটিকে আপনার পাসওয়ার্ড পরিবর্তন করতে দেয় allowing

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

এছাড়াও, কুকিগুলি ব্রাউজারবিহীন ভিত্তিক অ্যাপ্লিকেশনগুলির জন্য (যেমন মোবাইল থেকে ট্যাবলেট অ্যাপ্লিকেশন) আপনার এপিআই গ্রাহ্য করে তোলে।


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

17
@ কেবিল্ডস কেবলই দূষিত পৃষ্ঠাটি ফর্মটি পোষ্ট করতে এজ্যাক্স ব্যবহার করছে। আক্রমণকারী যদি আপনাকে নিয়মিত ফর্মের জমা বোতামে ক্লিক করতে আসে তবে সিওআরএস খেলতে আসে না।
এমভিডিডি

3
তবে এর অর্থ এই নয় যে সাইটটি কেবল তখনই দুর্বল হবে যদি সেখানে কোনও সিএসআরএফ টোকেন ব্যবহার না করা হত?
কেবিল্ডস

5
ঠিক আছে, আপনি সিএসআরএফ টোকেন ব্যবহার করে সিএসআরএফ আক্রমণগুলি প্রশমিত করতে পারেন। তবে এটি আপনাকে স্পষ্টভাবে করতে হবে।
এমভিডিডি

2
কুকিজ ব্যবহার আপনাকে এক্সএসএস আক্রমণ থেকে সুরক্ষা দেয়, তবে অনুমোদনের শিরোনাম সেট করতে সক্ষম হতে আপনাকে জাভাস্ক্রিপ্ট থেকে অ্যাক্সেস টোকেন অ্যাক্সেস করতে হবে; নিজেকে সিএসআরএফ থেকে রক্ষা করা সহজ, তবে এক্সএসএস এর বিরুদ্ধে রক্ষা করা আরও শক্ত
বেয়ার

101

সংক্ষিপ্ত বিবরণ

আপনি যা জিজ্ঞাসা করছেন তা হ'ল ক্লায়েন্ট থেকে সার্ভারে জেএসএন ওয়েব টোকেন (জেডাব্লুটি) প্রেরণের জন্য কুকিজ এবং বহনকারী টোকেনগুলির মধ্যে পার্থক্য।

কুকি এবং বহনকারী টোকেন উভয়ই ডেটা প্রেরণ করে।

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

সেই ডেটা প্রায়শই JWT হিসাবে এনকোড থাকে।

মিষ্ট রূটি

একটি কুকি একটি নাম-মূল্য জুড়ি, যা একটি ওয়েব ব্রাউজারে সঞ্চিত থাকে এবং এর একটি মেয়াদ শেষ হওয়ার তারিখ এবং সম্পর্কিত ডোমেন থাকে।

আমরা জাভাস্ক্রিপ্ট বা এইচটিটিপি রেসপন্স শিরোনামের সাহায্যে কোনও ওয়েব ব্রাউজারে কুকি সংরক্ষণ করি।

document.cookie = 'my_cookie_name=my_cookie_value'   // JavaScript
Set-Cookie: my_cookie_name=my_cookie_value           // HTTP Response Header

ওয়েব ব্রাউজারটি স্বয়ংক্রিয়ভাবে কুকির ডোমেনে প্রতিটি অনুরোধ সহ কুকিজ প্রেরণ করে।

GET http://www.bigfont.ca
Cookie: my_cookie_name=my_cookie_value               // HTTP Request Header

বহনকারী টোকেন

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

GET http://www.bigfont.ca
Authorization: Bearer my_bearer_token_value          // HTTP Request Header

JWT এবং টোকেন ভিত্তিক প্রমাণীকরণ

যখন আমরা টোকেন-ভিত্তিক প্রমাণীকরণ করি যেমন ওপেনআইডি, ওআউথ বা ওপেনআইডি কানেক্ট, তখন আমরা একটি বিশ্বস্ত কর্তৃপক্ষের একটি অ্যাক্সেস_ টোকেন (এবং কখনও কখনও আইডি_ টোকেন) পাই। সাধারণত আমরা এটি সঞ্চয় করতে এবং সুরক্ষিত সংস্থানগুলির জন্য এইচটিটিপি অনুরোধের সাথে প্রেরণ করতে চাই। আমরা যে কিভাবে করব?

বিকল্প 1 টি কুকিতে টোকেন (গুলি) সংরক্ষণ করা in এটি স্টোরেজ পরিচালনা করে এবং Cookieপ্রতিটি অনুরোধের শিরোনামে সার্ভারে স্বয়ংক্রিয়ভাবে টোকেন (গুলি) প্রেরণ করে । সার্ভারটি তখন কুকিকে পার্স করে, টোকেন (গুলি) পরীক্ষা করে এবং সে অনুযায়ী সাড়া দেয়।

আরেকটি বিকল্প হ'ল স্থানীয় / সেশন স্টোরেজে টোকন সংরক্ষণ করা এবং তারপরে Authorizationপ্রতিটি অনুরোধের শিরোনামটি ম্যানুয়ালি সেট করা । এই ক্ষেত্রে, সার্ভার শিরোনামটি পড়ে এবং একটি কুকির মতো এগিয়ে যায়।

আরও জানতে লিঙ্কযুক্ত আরএফসিগুলি পড়ার পক্ষে এটি মূল্যবান।


22

এমভিডিডি কুকিজ স্বয়ংক্রিয়ভাবে পাঠানো সম্পর্কে যা বলেছে তা ছাড়াও:

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

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


4
ভাল কাজ স্পষ্ট করে যে তুলনাটি সত্যই বাহক টোকেন এবং কুকিজের মধ্যে।
শান লুটিন

14

কুকিজগুলি অনুরোধের সাথে স্বয়ংক্রিয়ভাবে প্রেরণের কারণে সিএসআরএফ আক্রমণের ঝুঁকি বাড়িয়ে তুলতে পারে, যখন তারা এক্সএসএস আক্রমণের ঝুঁকি হ্রাস করতে পারেHttpOnly পতাকাটি সেট হয়ে , কারণ পৃষ্ঠায় ইনজেক্ট করা কোনও স্ক্রিপ্ট পড়তে সক্ষম হবে না কুকি

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

এক্সএসএস: আক্রমণকারী কোনও ক্ষতিগ্রস্থ সাইটে একটি স্ক্রিপ্ট এম্বেড করে (ইনপুটগুলি সঠিকভাবে স্যানিটাইজ না করা হলে ভুক্তভোগী সাইটটি কেবল ঝুঁকিপূর্ণ), এবং আক্রমণকারীর স্ক্রিপ্ট পৃষ্ঠাটিতে জাভাস্ক্রিপ্ট করার অনুমতিপ্রাপ্ত কিছু করতে পারে। আপনি যদি স্থানীয় স্টোরেজে জেডব্লিউটি টোকেন সংরক্ষণ করেন তবে আক্রমণকারীর স্ক্রিপ্টটি সেই টোকেনগুলি পড়তে পারে এবং সেগুলি নিয়ন্ত্রণ করে এমন একটি সার্ভারে সেই টোকেনগুলি প্রেরণ করতে পারে। আপনি যদি HttpOnlyপতাকাটির সাথে কুকি ব্যবহার করেন তবে আক্রমণকারীর স্ক্রিপ্ট আপনার কুকিটি শুরু করতে পারা সক্ষম হবে না। এটি বলেছিল যে তারা যে স্ক্রিপ্টটি সাফল্যের সাথে ইনজেকশন করেছে তা এখনও জাভাস্ক্রিপ্ট করতে পারে এমন কিছু করতে সক্ষম হবে, সুতরাং আপনি এখনও আইএমওকে হজ করে রেখেছেন (অর্থাত্‍, তারা কুকিটি পরে ব্যবহারের জন্য তাদের নিজের সার্ভারে পাঠাতে সক্ষম নাও হতে পারে) said তারা করতে পারেন XHR ব্যবহার vicitim সাইটটিতে অনুরোধ পাঠাতে, যা কুকি যাহাই হউক না কেন অন্তর্ভুক্ত করা হবে)।


2

রেফ - জেএসএন ওয়েব টোকেনের প্রয়োজন

বিস্কুট

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

এখানে চিত্র বর্ণনা লিখুন

কুকিজের ত্রুটি

  • কুকিজ / সেশন আইডি স্বয়ংসম্পূর্ণ নয়। এটি একটি রেফারেন্স টোকেন। প্রতিটি বৈধতার সময় জিমেইল সার্ভারের সাথে সম্পর্কিত তথ্য আনতে হবে।
  • একাধিক এপিআই এবং সার্ভারগুলিকে জড়িত মাইক্রোসার্ভিসেস আর্কিটেকচারের জন্য উপযুক্ত নয়

এখানে চিত্র বর্ণনা লিখুন

JWT

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

এখানে চিত্র বর্ণনা লিখুন

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