এখানে অনেকগুলি প্রশ্ন জিজ্ঞাসা করা হয়েছে, এবং মনে হচ্ছে নোড এবং পাসপোর্টের প্রসঙ্গে প্রশ্নগুলি জিজ্ঞাসা করা হলেও, আসল প্রশ্নগুলি কোনও নির্দিষ্ট প্রযুক্তি দিয়ে কীভাবে করা যায় তার চেয়ে কর্মপ্রবাহ সম্পর্কে আরও বেশি।
আসুন @ কিথ উদাহরণস্বরূপ সেটআপটি ব্যবহার করুন, যুক্ত সুরক্ষার জন্য কিছুটা সংশোধিত:
- ওয়েব সার্ভারে
https://example.com
একটি একক পৃষ্ঠা জাভাস্ক্রিপ্ট ক্লায়েন্ট অ্যাপ্লিকেশন সরবরাহ করে
- RESTful ওয়েব পরিষেবা
https://example.com/api
সমৃদ্ধ ক্লায়েন্ট অ্যাপ্লিকেশনটিতে সার্ভার সমর্থন সরবরাহ করে
- নোড এবং পাসপোর্ট.জেজে সার্ভার প্রয়োগ করা হয়েছে।
- সার্ভারের একটি "ব্যবহারকারী" সারণী সহ একটি ডাটাবেস (কোনও ধরণের) রয়েছে।
- ব্যবহারকারীর নাম / পাসওয়ার্ড এবং ফেসবুক কানেক্ট প্রমাণীকরণ বিকল্প হিসাবে দেওয়া হয়
- ধনী ক্লায়েন্ট আরএসটি-র অনুরোধ করে
https://example.com/api
- সেখানে অন্যান্য ক্লায়েন্টদের (ফোন অ্যাপ্লিকেশান, উদাহরণস্বরূপ) যে ওয়েব পরিষেবা ব্যবহার করা যেতে পারে
https://example.com/api
কিন্তু ওয়েব সার্ভার সম্পর্কে জানি না https://example.com
।
মনে রাখবেন যে আমি সুরক্ষিত HTTP ব্যবহার করছি। পাসওয়ার্ড এবং অনুমোদনের টোকেনের মতো সংবেদনশীল তথ্য ক্লায়েন্ট এবং সার্ভারের মধ্যে চলে যাওয়ায় এটি উন্মুক্তভাবে উপলব্ধ যে কোনও পরিষেবার জন্য আমার মতে এটি আবশ্যক।
ব্যবহারকারীর নাম / পাসওয়ার্ড প্রমাণীকরণ
আসুন প্রথমে কীভাবে সরল পুরানো প্রমাণীকরণ কাজ করে তা দেখুন।
- ব্যবহারকারীর সাথে সংযোগ স্থাপন করে
https://example.com
- সার্ভারটি একটি সমৃদ্ধ জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন পরিবেশন করে যা প্রাথমিক পৃষ্ঠাটি রেন্ডার করে। পৃষ্ঠায় কোনওরকম একটি লগইন ফর্ম রয়েছে।
- ব্যবহারকারী এই লগইন না করায় এই একক পৃষ্ঠার অ্যাপ্লিকেশনটির অনেকগুলি অংশ ডেটা দিয়ে পপ করা যায়নি All এই সমস্ত বিভাগটিতে একটি "লগইন" ইভেন্টে ইভেন্ট শ্রোতা রয়েছে। এই সমস্ত ক্লায়েন্টের পাশের জিনিস, সার্ভারটি এই ইভেন্টগুলি সম্পর্কে জানে না।
- ব্যবহারকারী তার লগইন এবং পাসওয়ার্ড প্রবেশ করে এবং জমা বোতামটি হিট করে, যা জাভাস্ক্রিপ্ট হ্যান্ডলারটিকে ক্লায়েন্ট পাশের ভেরিয়েবলের মধ্যে ব্যবহারকারীর নাম এবং পাসওয়ার্ড রেকর্ড করতে ট্রিগার করে। তারপরে এই হ্যান্ডলারটি "লগইন" ইভেন্টটিকে ট্রিগার করে। আবার এটি সমস্ত ক্লায়েন্টের পক্ষের ক্রিয়া, শংসাপত্রগুলি এখনও সার্ভারে প্রেরণ করা হয়নি ।
- "লগইন" ইভেন্টের শ্রোতাদের অনুরোধ করা হয়েছে। পৃষ্ঠাগুলিতে
https://example.com/api
রেন্ডার করার জন্য ব্যবহারকারীদের নির্দিষ্ট ডেটা পেতে এইগুলির প্রত্যেকটির এখনই RESTful API এ এক বা একাধিক অনুরোধ প্রেরণ করা দরকার । তারা ওয়েব পরিষেবায় প্রেরিত প্রতিটি একক অনুরোধে ব্যবহারকারীর নাম এবং পাসওয়ার্ড অন্তর্ভুক্ত করবে, সম্ভবত এইচটিটিপি বেসিক প্রমাণীকরণের আকারে , যেহেতু পরিষেবাটি বিশ্রামপ্রাপ্ত তাই এক অনুরোধ থেকে পরবর্তী অনুরোধে ক্লায়েন্টের অবস্থা বজায় রাখার অনুমতি নেই। যেহেতু ওয়েব পরিষেবাদি সুরক্ষিত HTTP এ রয়েছে ট্রানজিটের সময় পাসওয়ার্ডটি নিরাপদে এনক্রিপ্ট করা হয়।
- ওয়েব সার্ভিস
https://example.com/api
প্রমাণীকরণের তথ্য সহ প্রতিটি পৃথক অনুরোধের একটি গোছা গ্রহণ করে। প্রতিটি অনুরোধে ব্যবহারকারীর নাম এবং পাসওয়ার্ড ব্যবহারকারীর ডাটাবেসের বিপরীতে পরীক্ষা করা হয় এবং সঠিক প্রমাণিত হলে অনুরোধ করা ফাংশনটি কার্যকর করে এবং ডেটা ক্লায়েন্টকে জেএসএন ফর্ম্যাটে ফিরিয়ে দেওয়া হয়। যদি ব্যবহারকারীর নাম এবং পাসওয়ার্ড না মেলে একটি ত্রুটি ক্লায়েন্টকে 401 এইচটিটিপি ত্রুটি কোড আকারে প্রেরণ করা হয়।
- প্রতিটি অনুরোধের সাথে ক্লায়েন্টদের ব্যবহারকারীর নাম এবং পাসওয়ার্ড প্রেরণ করার পরিবর্তে আপনার RESTful পরিষেবাদিতে একটি "get_access_token" ফাংশন থাকতে পারে যা ব্যবহারকারীর নাম এবং পাসওয়ার্ড নেয় এবং একটি টোকেন দিয়ে সাড়া দেয়, যা কিছু ধরণের ক্রিপ্টোগ্রাফিক হ্যাশ যা অনন্য এবং এর মেয়াদ শেষ হয়ে যায় iration এর সাথে সম্পর্কিত তারিখ এই টোকেনগুলি প্রতিটি ব্যবহারকারীর সাথে ডাটাবেসে সংরক্ষণ করা হয়। তারপরে ক্লায়েন্ট পরবর্তী অনুরোধগুলিতে অ্যাক্সেস টোকেন প্রেরণ করে। অ্যাক্সেস টোকেনটি ব্যবহারকারীর নাম এবং পাসওয়ার্ডের পরিবর্তে ডাটাবেসের বিরুদ্ধে বৈধ হয়ে যাবে।
- ফোন অ্যাপ্লিকেশনগুলির মতো নন ব্রাউজার ক্লায়েন্ট অ্যাপ্লিকেশনগুলি উপরের মতো করে, তারা ব্যবহারকারীকে তার শংসাপত্রগুলি প্রবেশ করতে বলে, তারপরে তাদের (বা তাদের থেকে উত্পন্ন একটি অ্যাক্সেস টোকেন) ওয়েব সার্ভিসে প্রতিটি অনুরোধের সাথে প্রেরণ করতে বলে।
এই উদাহরণ থেকে গুরুত্বপূর্ণ টেক অফ পয়েন্টটি হ'ল RESTful ওয়েব পরিষেবাগুলির প্রতিটি অনুরোধের সাথে প্রমাণীকরণের প্রয়োজন ।
এই দৃশ্যে সুরক্ষার একটি অতিরিক্ত স্তর ব্যবহারকারীর প্রমাণীকরণের পাশাপাশি ক্লায়েন্ট অ্যাপ্লিকেশন অনুমোদন যোগ করবে। উদাহরণস্বরূপ, আপনার কাছে ওয়েব ক্লায়েন্ট, আইওএস এবং অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলি সমস্ত ওয়েব পরিষেবা ব্যবহার করে আপনি কোনও সার্ভারের দ্বারা প্রদত্ত অনুরোধের তিনটি ক্লায়েন্টের মধ্যে কোনটি নির্ধারিত হতে পারে তা সার্ভারের কাছে জানতে চাওয়া হতে পারে, অনুমোদনপ্রাপ্ত ব্যবহারকারী কে। এটি আপনার ওয়েব পরিষেবাটিকে নির্দিষ্ট ক্লায়েন্টদের নির্দিষ্ট ক্রিয়াকে সীমাবদ্ধ করতে সক্ষম করতে পারে। এর জন্য আপনি API কী এবং গোপনীয়তা ব্যবহার করতে পারেন, সে সম্পর্কে কিছু ধারণার জন্য এই উত্তরটি দেখুন ।
ফেসবুক প্রমাণীকরণ
উপরের কর্মপ্রবাহটি ফেসবুক সংযোগের জন্য কাজ করে না কারণ ফেসবুকের মাধ্যমে লগইনটিতে একটি তৃতীয় পক্ষ, ফেসবুক রয়েছে। লগইন পদ্ধতিতে ব্যবহারকারীর ফেসবুকের ওয়েবসাইটে পুনঃনির্দেশ করা প্রয়োজন যেখানে শংসাপত্রগুলি আমাদের নিয়ন্ত্রণের বাইরে enteredোকানো হয়।
সুতরাং আসুন দেখুন কীভাবে বিষয়গুলি পরিবর্তিত হয়:।
- ব্যবহারকারীর সাথে সংযোগ স্থাপন করে
https://example.com
- সার্ভারটি একটি সমৃদ্ধ জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন পরিবেশন করে যা প্রাথমিক পৃষ্ঠাটি রেন্ডার করে। পৃষ্ঠায় কোনওরকম একটি লগইন ফর্ম রয়েছে যাতে "ফেসবুকের সাথে লগইন" বোতাম অন্তর্ভুক্ত রয়েছে।
- ব্যবহারকারী "ফেসবুক উইথ ফেসবুক" বোতামটি ক্লিক করেন, এটি কেবল একটি লিঙ্ক যা পুনঃনির্দেশ করে (উদাহরণস্বরূপ)
https://example.com/auth/facebook
।
https://example.com/auth/facebook
রুট passport.js দ্বারা পরিচালিত হয় (দেখুন ডকুমেন্টেশন )
- সমস্ত ব্যবহারকারী দেখেছে যে পৃষ্ঠাটি পরিবর্তিত হয়েছে এবং এখন তারা ফেসবুক দ্বারা পরিচালিত একটি পৃষ্ঠায় রয়েছে যেখানে তাদের আমাদের ওয়েব অ্যাপ্লিকেশনটি লগইন করতে ও অনুমোদিত করতে হবে। এটি পুরোপুরি আমাদের নিয়ন্ত্রণের বাইরে।
- ফেসবুক ব্যবহারকারী লগ এবং, আমাদের আবেদন করার অনুমতি দেয়, যাতে ফেসবুক এখন কলব্যাক URL রয়েছে যা আমরা passport.js সেটআপ, যা দৃষ্টান্ত অনুসরণ কনফিগার ফিরে পুননির্দেশনা ডকুমেন্টেশন হয়
https://example.com/auth/facebook/callback
- এই পাসপোর্ট.জেএস হ্যান্ডলারটি
https://example.com/auth/facebook/callback
এই কলব্যাক ফাংশনটি উপভোগ করবে যা ফেসবুকের অ্যাক্সেস টোকেন এবং ব্যবহারকারীর ইমেল ঠিকানা সহ ফেসবুক থেকে কিছু ব্যবহারকারীর তথ্য গ্রহণ করবে।
- ইমেলটির সাহায্যে আমরা ব্যবহারকারীকে আমাদের ডাটাবেসে সনাক্ত করতে পারি এবং এর সাথে ফেসবুক অ্যাক্সেস টোকেন সংরক্ষণ করতে পারি।
- আপনি ফেসবুক কলব্যাকের শেষ কাজটি সমৃদ্ধ ক্লায়েন্ট অ্যাপ্লিকেশনটিতে পুনর্নির্দেশ করা, তবে এবার আমাদের ব্যবহারকারীর নাম এবং ক্লায়েন্টের কাছে অ্যাক্সেস টোকেনটি পাস করতে হবে যাতে এটি সেগুলি ব্যবহার করতে পারে। এই উপায়ে একটি সংখ্যা মধ্যে করা সম্ভব। উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট ভেরিয়েবলগুলি সার্ভার-সাইড টেম্পলেট ইঞ্জিনের মাধ্যমে পৃষ্ঠাতে যুক্ত করা যেতে পারে, না হলে এই তথ্য সহ একটি কুকি ফিরিয়ে দেওয়া যেতে পারে। (ইউআরএলটিতে এই ডেটা পাস করার সাথে সাথে সুরক্ষা সম্পর্কিত বিষয়গুলি নির্দেশ করার জন্য @ রায়ানকিমবারকে ধন্যবাদ জানাই)
- সুতরাং এখন আমরা আরও একবার সিঙ্গল পেজ অ্যাপ্লিকেশন শুরু করি, কিন্তু ক্লায়েন্টটির ব্যবহারকারীর নাম এবং অ্যাক্সেস টোকেন রয়েছে।
- ক্লায়েন্ট অ্যাপ্লিকেশনটি "লগইন" ইভেন্টটি তাত্ক্ষণিকভাবে ট্রিগার করতে পারে এবং অ্যাপ্লিকেশনটির বিভিন্ন অংশকে ওয়েব পরিষেবা থেকে তাদের প্রয়োজনীয় তথ্যের জন্য আবেদন করতে দেয়।
- প্রেরিত সমস্ত অনুরোধগুলিতে
https://example.com/api
প্রমাণীকরণের জন্য ফেসবুক অ্যাক্সেস টোকন বা আরএসটি এপিআইতে "get_access_token" ফাংশনের মাধ্যমে ফেসবুকের টোকেন থেকে আবেদনের নিজস্ব অ্যাক্সেস টোকেন অন্তর্ভুক্ত থাকবে।
- ব্রাউজারবিহীন অ্যাপ্লিকেশনগুলিতে এটি এখানে আরও কিছুটা কঠিন, কারণ ওআউথকে লগ ইন করার জন্য একটি ওয়েব ব্রাউজারের প্রয়োজন a ফেসবুকের অ্যাক্সেস টোকেনটিকে কিছু পদ্ধতির মাধ্যমে অ্যাপ্লিকেশনটিতে ফিরে যাওয়ার জন্য ব্রাউজারের একটি উপায় প্রয়োজন।
আমি আশা করি এটি বেশিরভাগ প্রশ্নের উত্তর দেয়। অবশ্যই আপনি টুইটার, গুগল বা অন্য কোনও OAuth ভিত্তিক প্রমাণীকরণ পরিষেবা দিয়ে ফেসবুক প্রতিস্থাপন করতে পারেন।
কারও কাছে এটির মোকাবেলার সহজ উপায় আছে কিনা তা জানতে আমি আগ্রহী be
passport-facebook
। আপনি এই কাজটি করার পরে, পরবর্তী পদক্ষেপটি কীভাবে পাসপোর্টটি কাজ করে এবং এটি কীভাবে শংসাপত্রগুলি সংরক্ষণ করে তা বুঝতে শুরু করা। এটিকে পুনঃনির্মাণের দিকে লক্ষ্য করা (আপনি যেটির উল্লেখ করেছেন তার একটি আপডেট সংস্করণ দেখুন এখানে ) শেষ ধাপগুলির একটি হতে পারে (বা আপনি এক্সপ্রেসে আরইএসটি ইন্টারফেসটি প্রয়োগ করতে পারেন)।