REST এপিআই সুরক্ষা স্টোর টোকেন বনাম জেডব্লিউটি বনাম ওআউথ


104

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

আমি প্রমাণীকরণের বিভিন্ন উপায়ে চেষ্টা করেছি, তবে এখনও কিছু ভুল ধারণা রয়েছে, তাই আমার আরও অভিজ্ঞ কারও পরামর্শ প্রয়োজন।

আমাকে বলতে দিন, আমি কীভাবে এই সমস্ত জিনিস বুঝি। আমি যদি কিছু ভুল করে বুঝতে পারি তবে দয়া করে আমাকে জানান।

যতক্ষণ না REST এপিআই স্টেটলেস পাশাপাশি সাধারণভাবে ওয়েইইবি, আমাদের প্রতিটি অনুরোধে (কুকিজ, টোকেন ....) কিছু লেখার ডেটা প্রেরণ করতে হবে। আমি ব্যবহারকারীকে প্রমাণীকরণের জন্য তিনটি বহুল ব্যবহৃত প্রক্রিয়া জানি

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

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

  3. OAuth 2. সার্ভার এবং ক্লায়েন্টের মধ্যে সরাসরি যোগাযোগ স্থাপন করা হলে কেন এই পদ্ধতির ব্যবহার করা উচিত তা আমি বুঝতে পারি না। আমি যতদূর বুঝতে পেরেছি, অন্যান্য অ্যাপ্লিকেশনগুলিকে পাসওয়ার্ড এবং লগইন না করে ব্যবহারকারীর তথ্যে অ্যাক্সেসের অনুমতি দেওয়ার জন্য সীমাবদ্ধ সুযোগের সাথে টোকেন জারি করতে OAuth সার্ভার ব্যবহার করা হয়। এটি সোশ্যাল নেটওয়ার্কগুলির জন্য দুর্দান্ত সমাধান, যখন ব্যবহারকারী কোনও পৃষ্ঠায় সাইন আপ করতে চায়, সার্ভার ব্যবহারকারীর তথ্য পাওয়ার জন্য অনুমতিগুলি অনুরোধ করতে পারে, উদাহরণস্বরূপ টুইটার বা ফেসবুক থেকে এবং ব্যবহারকারী ডেটা সহ রেজিস্ট্রেশন ক্ষেত্রগুলি পূরণ করতে পারে fill

অনলাইন স্টোরের জন্য মোবাইল ক্লায়েন্ট বিবেচনা করুন।

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

তাহলে জেডাব্লুটি টোকেনের সুবিধা কী?

ওআউথ সম্পর্কে দ্বিতীয় প্রশ্ন, আমার সার্ভারের সাথে সরাসরি যোগাযোগের ক্ষেত্রে আমি কি এটি ব্যবহার করব? ক্লায়েন্ট এবং সার্ভারের মধ্যে কেবলমাত্র টোকেন ইস্যু করার জন্য আরও একটি স্তরের উদ্দেশ্য কী, তবে যোগাযোগ ওউথ সার্ভারের সাথে নয় তবে প্রধান সার্ভারের সাথে হবে। আমি যেমন বুঝতে পারি যে OAuth সার্ভারটি শুধুমাত্র তৃতীয় পক্ষের অ্যাপ্লিকেশন অনুমতি (টোকেন) ব্যবহারকারীর ব্যক্তিগত তথ্য অ্যাক্সেস দেওয়ার জন্য দায়বদ্ধ is তবে আমার মোবাইল ক্লায়েন্ট অ্যাপ্লিকেশনটি তৃতীয় পক্ষের নয়।


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

উত্তর:


86

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

সেশন আইডি / কুকিজ

পেশাদাররা:

  • ক্লায়েন্ট এবং সার্ভার উভয়ই কোড করা সহজ।
  • যখন কেউ লগ আউট করে সেশনটি ধ্বংস করা সহজ।

কনস:

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

জেএসন ওয়েব টোকেন (জেডব্লিউটি)

দ্বিতীয় ক্ষেত্রে ডেটা একটি জেডাব্লুটিটিতে সংরক্ষণ করা হয় যা সার্ভারের পরিবর্তে প্রায় পাস করা হয়।

পেশাদাররা:

  • সার্ভারের সাইড স্টোরেজ সমস্যাগুলি চলে গেছে।
  • ক্লায়েন্ট সাইড কোড সহজ।

কনস:

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

    যে কেউ স্বাক্ষর করে কীটির অনুলিপি পেয়েছে সে JWTs তৈরি করতে পারে। কখন হতে পারে তা আপনি হয়ত জানেন না।

    কিছু লাইব্রেরিতে একটি বাগ রয়েছে (যা?) যে কোনও জেডব্লিউটি স্বাক্ষরিত কোনও "অবিশ্বাস্য" অ্যালগোরিদমের সাথে স্বাক্ষরিত করে যাতে যে কোনও জেডব্লিউটি তৈরি করতে পারে যা সার্ভারের বিশ্বাস করবে।

  • একটি JWT এর মেয়াদ শেষ হওয়ার পূর্বে প্রত্যাহার করার জন্য আপনাকে একটি প্রত্যাহার তালিকা ব্যবহার করা দরকার। এটি আপনাকে এড়াতে চেষ্টা করে যাচ্ছিল সার্ভারের সাইড স্টোরেজ সমস্যাগুলিতে ফিরে আসে।

OAuth এর

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

পেশাদাররা:

  • ব্যবহারকারীদের সাইনআপ বা তাদের পাসওয়ার্ড পুনরায় সেট করার জন্য কোনও কোড নেই।
  • বৈধতা লিঙ্ক সহ ইমেল প্রেরণ এবং তারপরে ঠিকানাটি বৈধ করার জন্য কোনও কোড নেই।
  • ব্যবহারকারীদের অন্য ব্যবহারকারী নাম এবং পাসওয়ার্ড শিখতে / লিখতে হবে না।

কনস:

  • আপনার ব্যবহারকারীদের আপনার পরিষেবাটি ব্যবহার করার জন্য আপনি তৃতীয় পক্ষের উপর নির্ভরশীল। যদি তাদের পরিষেবাটি হ্রাস পায় বা তারা এটিকে বন্ধ করে দেয় তবে আপনার অন্য কিছু বের করার দরকার আছে। উদাহরণস্বরূপ: ব্যবহারকারীর পরিচয় যদি "foo@a.com" থেকে "বার@b.com" এ পরিবর্তিত হয় তবে আপনি কীভাবে তাদের অ্যাকাউন্ট ডেটা স্থানান্তর করবেন?
  • সাধারণত আপনাকে প্রতিটি সরবরাহকারীর জন্য কোড লিখতে হবে। যেমন গুগল, ফেসবুক, টুইটার।
  • আপনার বা আপনার ব্যবহারকারীদের গোপনীয়তা সংক্রান্ত উদ্বেগ থাকতে পারে। সরবরাহকারীরা জানেন যে তাদের মধ্যে কোন ব্যবহারকারী আপনার পরিষেবা ব্যবহার করে।
  • আপনি সরবরাহকারীকে বিশ্বাস করছেন। কোনও সরবরাহকারীর পক্ষে টোকেনগুলি ইস্যু করা সম্ভব যা একজন ব্যবহারকারীর পক্ষে অন্য কারও কাছে বৈধ। এটি বৈধ উদ্দেশ্যে হতে পারে বা নাও হতে পারে।

বিবিধ

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

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

5
আমি জানি না কেন এটি গৃহীত উত্তর? এটা বাস্তব প্রশ্নের উত্তর নয়, শুধু অন্যান্য ভাবে প্রশ্ন সংস্কার
AMD

1
আপনি বলছেন: "জেডাব্লুটিটিতে সংরক্ষিত ডেটা ক্লায়েন্টের দ্বারা পঠনযোগ্য This এটি একটি সমস্যা হতে পারে .. যদি এটি কোনও সমস্যা হয় তবে কেন জেডব্লিউই ব্যবহার করবেন না?
সিলভার

এই উত্তরটি আপেল এবং কমলাগুলিকে বিভ্রান্ত করে। আপনার এগুলি OAuth 2.0 এর সাথে তুলনা করা উচিত নয় ("অনুমোদন" স্পেস)। ওপিকে যা জানার দরকার তা হ'ল: "রিসোর্স মালিকের পাসওয়ার্ড ফ্লো" - যা অনুদান হিসাবে প্রমাণীকরণ।
ওনুর ইল্ডারিয়াম

5

নিজেকে জিজ্ঞাসা করুন কেন আপনাকে মূল টোকেনটি অবৈধ করতে হবে।

কোনও ব্যবহারকারী লগ ইন করে, একটি টোকেন তৈরি হয় এবং অ্যাপটি বন্ধ হয়ে যায়।

ব্যবহারকারী লগআউট টিপেন, একটি নতুন টোকেন উত্পন্ন হয়েছে এবং মূল টোকেনটি প্রতিস্থাপন করবে। আবারও সব ঠিক আছে।

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

আমি নিজেও এটি উদ্বিগ্ন বলে মনে করি না। যদি কেউ আপনার এনক্রিপ্ট করা https ডেটাটিকে বাধা এবং ডিকোড করছে তবে আপনার অনেক বড় সমস্যা রয়েছে।

আসল টোকেনে মেয়াদোত্তীকরণের সময়টি রেখে আপনি নিজেকে কিছু অতিরিক্ত সুরক্ষা দিতে পারেন। সুতরাং যদি চুরি বা অন্য কিছু হয়ে যাওয়ার অবসান ঘটে তবে এটি কেবল অল্প সময়ের জন্য ভাল।

অন্যথায়, আমি মনে করি আপনার সার্ভারে রাষ্ট্রীয় তথ্য থাকা দরকার। টোকেনগুলিকে কালো তালিকাভুক্ত করবেন না পরিবর্তে বর্তমান টোকেনের স্বাক্ষরটি সাদা তালিকাভুক্ত করবেন।


2
যদি আপনি ধরে নেন যে আপনার কিছু ক্লায়েন্ট দূষিত, তবে সেশনটি অনুলিপি করে পুনরায় ব্যবহার করা হবে তা সহজেই দেখা যায় এবং আপনাকে সার্ভারে এটি মোকাবেলা করতে হবে।
মাইকেল শ 16

1
খারাপ ধারণা, এটি পরে হ্যাকার দ্বারা ব্যবহার করা যেতে পারে, বা কেবল
নিষ্ঠুরভাবে

2
কল্পনা করুন যে কোনও ব্যবহারকারী অন্য সমস্ত ডিভাইস থেকে লগ আউট করতে চান, জেডাব্লুটিটি ব্যবহার করা সম্ভব নয়।
AMD

@ সম্ভব না? আমি যদি ননস = (এলোমেলো) যুক্ত করি এবং যদি ব্যবহারকারী লগ আউট করে তবে ননকে প্রতিস্থাপন করুন। সহজ এবং কার্যকর বলে মনে হচ্ছে।
সাইমন বি।

3

ব্যবহারকারীর সাথে একটি লবণের মান সংরক্ষণ করে এবং ব্যবহারকারীর জন্য টোকেনের অংশ হিসাবে লবণ ব্যবহার করে আপনি উল্লিখিত জেডাব্লুটি সমস্যাগুলি পরিচালনা করতে পারেন। তারপরে আপনার যখন টোকেনটি অবৈধ করতে হবে তখন কেবল লবণটি পরিবর্তন করুন।

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


4
তবে এটি আবার এই ক্ষেত্রে রাজ্যে পূর্ণ হয়ে ওঠে, সুতরাং লবণ তৈরি করার বা অন্য কোনও পদ্ধতি ব্যবহার করার কারণ কী, আপনি টেবিলের মধ্যে টোকেনটি সহজ স্টোর করতে পারেন এবং এটি বাতিল হওয়ার পরে মুছে ফেলতে পারেন
CROSP

2
আপনি সময় ভিত্তিতে অবৈধ করতে পারেন।
রিবল্ড এডি

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

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

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