OAuth 2.0: সুবিধা এবং ব্যবহারের ক্ষেত্রে - কেন?


256

OAuth2 সম্পর্কে ভাল কি কেউ ব্যাখ্যা করতে পারে এবং কেন আমাদের এটি প্রয়োগ করা উচিত? আমি জিজ্ঞাসা করছি কারণ আমি এটি সম্পর্কে কিছুটা বিভ্রান্ত - আমার বর্তমান চিন্তাভাবনাগুলি এখানে:

OAuth1 (আরও সুনির্দিষ্টভাবে HMAC) অনুরোধগুলি যৌক্তিক, বোঝা সহজ, বিকাশে সহজ এবং সত্যই সত্যই নিরাপদ বলে মনে হচ্ছে।

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

এবং অন্য অ্যাক্সেস টোকেন পেতে, আপনি অ্যাক্সেস টোকেন হিসাবে একই সময়ে পাস করা একটি রিফ্রেশ টোকেন ব্যবহার করুন। এটি কি সুরক্ষা দৃষ্টিকোণ থেকে অ্যাক্সেস টোকেনকে নিরর্থক করে তোলে?

প্লাস, যেমন / আর / নেটসেক্সটি সম্প্রতি দেখিয়েছে, এসএসএল পুরোপুরি নিরাপদ নয়, তাই সুরক্ষিত এইচএমএসি পরিবর্তে টিএলএস / এসএসএল-তে সমস্ত কিছু পাওয়ার জন্য চাপ আমাকে বিভ্রান্ত করে।

OAuth বিতর্ক করছে যে এটি প্রায় 100% সুরক্ষা নয়, তবে এটি প্রকাশিত এবং সমাপ্ত হওয়া। এটি ঠিক কোনও সরবরাহকারীর দৃষ্টিকোণ থেকে আশাব্যঞ্জক শব্দ নয়। আমি দেখতে পাচ্ছি খসড়াটি কী অর্জন করার চেষ্টা করছে যখন এটিতে different টি বিভিন্ন প্রবাহের উল্লেখ করা হয়েছে তবে এটি আমার মাথায় একসাথে ফিট করে না।

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


উত্তর:


324

পটভূমি: আমি OAuth 1.0a এবং 2.0 এর জন্য ক্লায়েন্ট এবং সার্ভার স্ট্যাক লিখেছি।

OAuth 1.0a & 2.0 উভয়ই দ্বি-পাদী প্রমাণীকরণকে সমর্থন করে , যেখানে কোনও সার্ভার ব্যবহারকারীর পরিচয় এবং তিন-পাদিত প্রমাণীকরণের বিষয়ে নিশ্চিত, যেখানে একটি সার্ভার ব্যবহারকারীর পরিচয়ের কোনও সামগ্রী সরবরাহকারী দ্বারা আশ্বাসপ্রাপ্ত। থ্রি-লেগড প্রমাণীকরণ হ'ল যেখানে অনুমোদনের অনুরোধ এবং অ্যাক্সেস টোকেনগুলি খেলতে আসে এবং এটি লক্ষণীয় গুরুত্বপূর্ণ যে OAuth 1 এরও রয়েছে।

জটিলটি: তিন-পাদিত প্রমাণীকরণ

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

(?) ছাড়াই ওআউথের বিশদটির গভীরতা না পেয়ে:

  1. ক্লায়েন্ট সার্ভারে একটি অনুমোদনের অনুরোধ জমা দেয়, যা ক্লায়েন্টকে তার পরিষেবার বৈধ ক্লায়েন্ট বলে যাচাই করে।
  2. সার্ভারটি তার সংস্থাগুলিতে অ্যাক্সেসের জন্য অনুরোধ করতে সামগ্রীটিকে সরবরাহকারীর কাছে ক্লায়েন্টকে পুনর্নির্দেশ করে।
  3. সামগ্রী সরবরাহকারী ব্যবহারকারীর পরিচয় যাচাই করে এবং প্রায়শই সংস্থানগুলি অ্যাক্সেস করার জন্য তাদের অনুমতি প্রার্থনা করে।
  4. সামগ্রী সরবরাহকারী সাফল্য বা ব্যর্থতার বিষয়টি অবহিত করে ক্লায়েন্টকে আবার সার্ভারে পুনঃনির্দেশ করে। এই অনুরোধ সাফল্যের একটি অনুমোদন কোড অন্তর্ভুক্ত।
  5. সার্ভার সামগ্রী সরবরাহকারীকে একটি আউট-ব্যান্ড অনুরোধ করে এবং অ্যাক্সেস টোকেনের জন্য অনুমোদনের কোডটি বিনিময় করে।

সার্ভারটি এখন অ্যাক্সেস টোকেনটি পাস করে সামগ্রীর সরবরাহকারীর কাছে অনুরোধ করতে পারে।

প্রতিটি এক্সচেঞ্জ (ক্লায়েন্ট-> সার্ভার, সার্ভার-> সামগ্রী সরবরাহকারী) একটি ভাগ করা গোপনীয়তার বৈধতা অন্তর্ভুক্ত করে, তবে যেহেতু OAuth 1 একটি এনক্রিপ্ট না করা সংযোগের উপর চালিয়ে যেতে পারে, তাই প্রতিটি বৈধতা তারের মাধ্যমে গোপনটি পাস করতে পারে না।

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

এই স্বাক্ষরটির জন্য ক্লায়েন্ট এবং সার্ভার উভয়কেই আর্গুমেন্টের ক্রমে সম্মতি জানাতে হবে (সুতরাং তারা ঠিক একই স্ট্রিংয়ে স্বাক্ষর করছে) এবং OAuth 1 সম্পর্কে একটি প্রধান অভিযোগ হ'ল এটির জন্য সার্ভার এবং ক্লায়েন্ট উভয়ই বাছাই করে এবং স্বাক্ষর করুন এটি বেআইনীভাবে কোড এবং হয় এটি সঠিক বা আপনি খুব 401 Unauthorizedসামান্য সাহায্য পান। এটি ক্লায়েন্ট লেখার ক্ষেত্রে বাধা বাড়িয়ে তোলে।

এসএসএল দিয়ে চালানোর অনুমোদনের অনুরোধের প্রয়োজনীয়তার মাধ্যমে, OAuth 2.0 আর্গুমেন্ট বাছাই এবং সম্পূর্ণরূপে সাইন ইন করার প্রয়োজনটিকে সরিয়ে দেয়। ক্লায়েন্টটি তার গোপনীয়তা সার্ভারে দেয় যা এটি সরাসরি বৈধ করে।

একই প্রয়োজনীয়তাগুলি সার্ভার-> সামগ্রী সরবরাহকারী সংযোগে উপস্থিত রয়েছে এবং যেহেতু এটি এসএসএল যা OAuth পরিষেবাদি অ্যাক্সেস করে এমন একটি সার্ভার লেখার ক্ষেত্রে একটি বাধা সরিয়ে দেয়।

এটি উপরের 1, 2 এবং 5 ধাপে জিনিসগুলিকে অনেক সহজ করে তোলে।

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

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

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

তাই রিফ্রেশ টোকেনগুলি বাদ দিয়ে OAuth 2 ক্লায়েন্ট, সার্ভার এবং সামগ্রী সরবরাহকারীর মধ্যে সমস্ত যোগাযোগকে সহজ করে if এবং রিফ্রেশ টোকেনগুলি কেবল তখন সুরক্ষা প্রদানের জন্য উপস্থিত থাকে যখন সামগ্রীটি এনক্রিপ্ট না করা থাকে।

দ্বি-পাদিত প্রমাণীকরণ

যদিও কখনও কখনও কোনও সার্ভারকে তার নিজস্ব সামগ্রীতে অ্যাক্সেস নিয়ন্ত্রণ করতে হয়। দ্বি-পাদিত প্রমাণীকরণ ক্লায়েন্টকে সরাসরি সার্ভারের মাধ্যমে ব্যবহারকারীকে প্রমাণীকরণ করতে দেয়।

OAuth 2 OAuth 1 এর কিছু এক্সটেনশানকে মানক করে যা বিস্তৃত ব্যবহারে ছিল। আমি যেটাকে সবচেয়ে ভাল জানি তা টুইটার দ্বারা xAuth হিসাবে প্রবর্তিত হয়েছিল । আপনি এটি OAuth 2 এ রিসোর্স মালিকের পাসওয়ার্ড শংসাপত্র হিসাবে দেখতে পারেন ।

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

OAuth 1 এর সাথে, এটি অফিসিয়াল স্ট্যান্ডার্ডের অংশ ছিল না, এবং অন্যান্য সমস্ত অনুরোধগুলির মতো একই স্বাক্ষরকরণ পদ্ধতিটি প্রয়োজন।

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

সুবিধা: সরলতা

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

এবং এটি স্ট্যান্ডার্ডটিতে ওউথ 1.0a (এক্সআউথের মতো) এর কিছু এক্সটেনশানগুলির কোড করে যা এখন ব্যাপক ব্যবহারে রয়েছে।


20
পরিভাষা সম্পর্কিত: এটি আরও ভাল হবে, যদি আপনি অস্পষ্ট ব্যক্তিদের (ক্লায়েন্ট, সার্ভার, ব্যবহারকারী ..) ব্যবহার না করে ক্ষতিগ্রস্থ পক্ষের অফিশিয়াল নামগুলি (অনুমোদন সার্ভার, রিসোর্স সার্ভার, রিসোর্স মালিক) অবিচল থাকেন।
আয়দিন কে।

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

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

যদি কেউ ওউথ বুঝতে না পারে। সরল ইংরেজির চেয়ে ওউথ শর্তাদি ব্যবহার করে ওউথ ব্যাখ্যা করা ফলপ্রসূ মনে হয় না।
জ্যাকব

7

প্রথমত, যেমন স্পষ্টভাবে OAuth প্রমাণীকরণে নির্দেশিত

OAuth 2.0 কোনও প্রমাণীকরণ প্রোটোকল নয়।

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

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

ওআউথ ব্যবহার করে ব্যবহারকারীর প্রমাণীকরণের জন্য একটি মান রয়েছে: ওপেনআইডি কানেক্ট, ওআউথ 2 এর সাথে সামঞ্জস্যপূর্ণ।

ওপেনআইডি কানেক্ট আইডি টোকন হ'ল একটি স্বাক্ষরিত জেএসওন ওয়েব টোকেন (জেডাব্লুটি) যা ক্লায়েন্ট অ্যাপ্লিকেশনকে নিয়মিত OAuth অ্যাক্সেস টোকেনের পাশাপাশি দেওয়া হয়। আইডি টোকনে প্রমাণীকরণ অধিবেশন সম্পর্কিত একাধিক দাবির সংকলন রয়েছে, যার মধ্যে ব্যবহারকারীর (উপ) পরিচয়দানকারী, পরিচয় প্রদানকারী যে টোকেন (ইস্যু) জারি করেছে তার সনাক্তকারী এবং সেই ক্লায়েন্টের সনাক্তকারী যার জন্য এই টোকন তৈরি হয়েছিল ( AUD)।

গো-তে, আপনি কোরোস / ডেক্স, ওপেনআইডি কানেক্ট আইডেন্টিটি (ওআইডিসি) এবং প্লাগেবল সংযোগকারী সহ OAuth 2.0 সরবরাহকারী দেখতে পারেন।

এই পোস্ট ভঙ্গ থেকে উত্তর


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

3

আমি এই প্রশ্নের উত্তর কিছুটা আলাদাভাবে দেব, এবং আমি খুব সুনির্দিষ্ট এবং সংক্ষিপ্ত হয়ে উঠব, মূলত কারণ @ পিটার টি এটির সমস্ত উত্তর দিয়েছেন।

এই মানটি থেকে আমি যে প্রধান লাভটি দেখি তা হ'ল দুটি নীতিকে সম্মান করা:

  1. উদ্বেগ বিচ্ছেদ.
  2. ওয়েব অ্যাপ্লিকেশন থেকে প্রমাণীকরণ ডিকোলিং, যা সাধারণত ব্যবসায় পরিবেশন করে।

এটি করে,

  1. আপনি সিঙ্গল সাইন-এর বিকল্প প্রয়োগ করতে পারেন: যদি আপনার একাধিক অ্যাপ্লিকেশন থাকে যা একটি এসটিএসকে বিশ্বাস করে। আমি যা বলতে চাইছি, সমস্ত অ্যাপ্লিকেশনগুলির জন্য একটি ব্যবহারকারীর নাম।
  2. আপনি আপনার ওয়েব অ্যাপ্লিকেশন (ক্লায়েন্ট) সক্ষম করতে পারেন যা ব্যবহারকারীর সাথে সম্পর্কিত এবং ওয়েব অ্যাপ্লিকেশন (ক্লায়েন্ট) এর সাথে সম্পর্কিত নয় এমন সংস্থানগুলি অ্যাক্সেস করতে পারে।
  3. আপনি বিশ্বাস করেন এমন কোনও তৃতীয় পক্ষের কাছে আপনি প্রমাণীকরণ প্রক্রিয়াটি জারি করতে পারেন এবং ব্যবহারকারীর সত্যতা যাচাইয়ের বিষয়ে কখনও চিন্তা করবেন না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.