প্রমাণীকরণের জন্য তৃতীয় পক্ষের (অর্থাত্ গুগল, ফেসবুক, টুইটার) ব্যবহার করার জন্য কীভাবে আমি একটি RESTful ওয়েবসার্চির আর্কিটেকচার করব?


25

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

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

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


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

আপনি কোন ভাষা / প্ল্যাটফর্ম ব্যবহার করছেন? আপনাকে চাকাটি পুনর্বিবেচনার দরকার নেই, কারণ আপনাকে যথেষ্ট পরিমাণে সাহায্য করার জন্য ফ্রেমওয়ার্ক রয়েছে। :)
রবএম

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

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

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

উত্তর:


14

মনে হচ্ছে দুটি লক্ষ্য আছে:

  1. শেষ ব্যবহারকারীদের তাদের বিদ্যমান সামাজিক অ্যাকাউন্টগুলির সাথে প্রমাণীকরণ করা সহজ
  2. আপনার ওয়েবসার্ভিস ব্যবহার করে বিকাশকারীদের পক্ষে সহজ

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

1. শেষ ব্যবহারকারীদের তাদের বিদ্যমান সামাজিক অ্যাকাউন্টগুলির সাথে প্রমাণীকরণ করা সহজ

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

যখন ফেসবুক থেকে ব্যবহারকারীকে আপনার সাইটে পুনঃনির্দেশিত করা হয় আপনি সেই ব্যবহারকারীর তথ্যটি আপনার ডাটাবেজে কোনও ব্যবহারকারী রেকর্ডে সংরক্ষণ করেন এবং তারপরে সেই ব্যবহারকারীর জন্য একটি নতুন সেশন তৈরি করেন। আপনি অবিলম্বে মূল-প্রবাহটি সম্পূর্ণ করে ওউথ অ্যাক্সেস_ টোকেন দিয়ে শেষ ব্যবহারকারীকে তাদের মূল প্রবাহ সাইটটিতে পুনঃনির্দেশ করুন।

২. আপনার ওয়েবসার্ভিস ব্যবহার করে বিকাশকারীদের পক্ষে সহজ

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

আপনার চমৎকার বিশ্রামের এপিআই ব্যবহার করে বিকাশকারীদের, তারা সেশন ক্যাপচার পোস্টের (উদাহরণস্বরূপ) মাধ্যমে কোনও ইঙ্গিত দেওয়ার পছন্দ না করা পর্যন্ত তারা ফেসবুক ইন্টারঅ্যাকশন সম্পর্কে অবগত হবে না।

টি এল; ডিআর

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

চিত্র কারণ চিত্র == শব্দ * 1000:

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

আমরা কি এই oauth2-piggy-back বলতে পারি?

ধাপে ধাপে প্রবাহ

  1. আপনার ব্যবহারকারীর এপিআই ব্যবহার করে এমন ব্যবহারকারীরা পরিদর্শন করেছেন
  2. অনুমোদিত ব্যবহারকারীকে অনুমোদন বা সাইন আপ করতে আপনার সাইটে প্রেরণ করা হয় (oauth2)
  3. শেষ ব্যবহারকারী সামাজিক লেখিকা বেছে নেয়, ফেসবুক লগইন বোতামটি ক্লিক করে
  4. আপনার সাইটটি কুকি সেট করে বা stateব্যবহারকারী কোথা থেকে এসেছে তা জানতে ফেসবুক ওউথটিতে সেট করে
  5. শেষ ব্যবহারকারী ফেসবুকে পুনঃনির্দেশিত এবং ফেসবুক সাইটে সংযোগ গ্রহণ করে
  6. শেষ ব্যবহারকারী ফেসবুক লেখার প্রক্রিয়াটি সম্পূর্ণ করতে আপনার সাইটে পুনঃনির্দেশিত
  7. আপনি আপনার ডাটাবেসে ব্যবহারকারীকে সন্ধান করেন বা তৈরি করেন
  8. আপনি আপনার সার্ভারে একটি নতুন সেশন তৈরি করুন
  9. আপনি আপনার সেশন টোকেন দিয়ে ব্যবহারকারীকে তাদের মূল সাইটে ফিরিয়ে আনুন

5

কীভাবে এটি এক্সটেনসিবল করা যায়

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

দুর্ভাগ্যক্রমে তাদের মধ্যে দুটি দরকার কারণ টুইটারটি এখনও ওআউথ 2 ব্যান্ডওয়্যাগনে লাফিয়ে উঠেনি।

OAuth আপনার অনুমোদনকারী পক্ষের জন্য একটি ইন্টারফেস তৈরি করা প্রয়োজন। টোকেনগুলি সার্ভারে সার্ভারের বিনিময় করা হবে। একটি এন্ট্রি পয়েন্ট তৈরি করুন, যা সমস্ত যোগাযোগ পরিচালনা করতে পারে।

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

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

এখানে আরেকটি সমস্যা হ'ল সমস্ত পরিষেবা একই কার্যকারিতা সরবরাহ করে না। এর অর্থ হতে পারে যে আপনার পরিষেবাগুলি আপনার নির্দিষ্ট হিসাবে পুরো API সরবরাহ করতে পারে না। আপনার এখানে একটি কৌশল থাকা দরকার, যা অ্যাপ্লিকেশনটিকে সুদৃ .়ভাবে ডাউনগ্রেড করতে দেয়।

এই সব আপনি সহজেই নতুন 3 য় পক্ষ সরবরাহকারী যুক্ত করতে পারবেন তা নিশ্চিত করবে।

টোকেন সমস্যা

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

এটি কখনও কখনও ঘটে থাকে, যে কোনও ব্যবহারকারী টোকেনটি প্রত্যাহার করে। এই জন্য প্রস্তুত থাকুন।

তথ্য ভান্ডার

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

অতিরিক্ত যাচাইয়ের জন্য, আপনি প্রোফাইলগুলি পৃথক, তবে আপনার ব্যবহারকারীর সাথে সংযুক্ত টেবিলে সঞ্চয় করতে পারেন। এটি আপনাকে কারও সম্পর্কে আরও অনেক তথ্য সরবরাহ করবে।

আপনার স্থানীয় আইনগুলিও পরীক্ষা করুন, কিছু ডেটার জন্য আপনার অতিরিক্ত সতর্কতা দরকার।

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


1

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

আপনার ওয়েবসাইট আর্কিটেকচারের উপর নির্ভর করে, আপনি খুব সহায়ক হতে পারে EveryAuth বা Passport এর মতো লাইব্রেরি ব্যবহার করতে পারেন ।


1

আমার দুটি সেন্ট: আমি আগে কখনও এর আগে কখনও কিছু করিনি বা জানি না কীভাবে এফবি, টুইটার বা গুগল লগইন প্রক্রিয়াগুলি কাজ করে, তবে আপনার প্রশ্নটি পড়ার সাথে সাথে কয়েকটি বিষয় আমার মাথায় উঠে গেল:

  • একাধিক লগইন: আমি যদি একদিন আমার ফেসবুক অ্যাকাউন্ট এবং পরের দিন আমার গুগল অ্যাকাউন্ট দিয়ে লগ ইন করি তবে কী হবে? নাকি এক সাথে? আপনি কি এই দুটি অ্যাকাউন্টকে অনন্য, পৃথক অ্যাকাউন্ট হিসাবে বিবেচনা করেন বা দুটি সংযুক্ত করার জন্য আপনার কোনও পদ্ধতি থাকা উচিত এবং আমাকে যেভাবেই টিকিটগুলি অ্যাক্সেস করার অনুমতি দেওয়া হয়েছিল?
  • বাহ্যিক শনাক্তকারীদের উপর নির্ভর করা: যখন ফেসবুক বা টুইটার তাদের অ্যাকাউন্ট শনাক্তকারীদের চেহারা পরিবর্তন করার সিদ্ধান্ত নেয় তখন কী ঘটে? উদাহরণস্বরূপ, যদি বাজলগিন {4382-af56 using কোডটি ব্যবহার করে কোনও অনন্য অ্যাকাউন্ট উপস্থাপন করে তবে সিদ্ধান্ত নেন যে এখন থেকে অ্যাকাউন্টগুলিতে 12 টি সংখ্যা থাকবে কারণ 8 যথেষ্ট ছিল না, আপনি কীভাবে 00 1200-4382-af56 tell 0000-4382 থেকে বলবেন? -af56}?

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

আমি নিশ্চিত নই যে আপনার মনে থাকা সমস্যাগুলিকে আমি সম্বোধন করেছি, তবে আপনি সত্যিই কোনও উদ্বেগের উদ্বেগের কথা উল্লেখ করেননি। আমি আশা করি আমার উত্তরটি যে কোনও উপায়ে কার্যকর ছিল।

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