কোনও আইওএস অ্যাপে ফেসবুক প্রমাণীকরণের জন্য ডিজাইন যা কোনও সুরক্ষিত ওয়েব পরিষেবা অ্যাক্সেস করে


402

লক্ষ্য: কোনও ব্যবহারকারীকে ফেসবুকের সাথে কোনও আইওএস অ্যাপ্লিকেশনটিতে প্রমাণীকরণের অনুমতি দিন যার জন্য আমি চালিত একটি সুরক্ষিত ওয়েব পরিষেবায় অ্যাক্সেস প্রয়োজন।

অনুমান: এই ব্যবহারকারীদের সাইন ইন করার জন্য ফেসবুক ব্যবহার না করা বেছে নেওয়ার জন্য একটি দেশীয় প্রমাণীকরণ (এবং নিবন্ধকরণ) ব্যবস্থা রয়েছে।

বিবরণ:

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

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

এটি কীভাবে ডিজাইন করা হবে সে সম্পর্কে আমার প্রাথমিক চিন্তাভাবনাগুলি তবে এটি সঠিক কিনা তা নিয়ে বৈধতা চাই।

  1. ক্লায়েন্ট ফেসবুক আইওএস লগইন পপ
  2. ইউআই ব্যবহারকারী ফেসবুক শংসাপত্রগুলির সাথে সাইন ইন করে এবং অ্যাক্সেস টোকেন পায়
  3. আইওএস অ্যাপটি আমাদের সার্ভারে অ্যাক্সেস টোকন পাস করে passes
  4. আমাদের সার্ভারটি অ্যাক্সেস টোকেন ব্যবহার করে এফবি গ্রাফ এপিআইয়ের সাথে কথা বলেছে (ক) টোকেনটিকে বৈধতা দিন এবং (খ) সেই অ্যাক্সেস টোকেনের জন্য এফবি ব্যবহারকারী আইডি পান।

    উদাহরণস্বরূপ আমাদের সার্ভারটি https: //راف.facebook.com/me/?access_token=XYZ কল করবে যা কোনও JSON অবজেক্টে প্রোফাইল তথ্য ফেরত দেবে

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

  6. ক্লায়েন্ট তারপরে পরবর্তী মিথস্ক্রিয়ায় প্রমাণীকরণের টিকিট দেয় যা প্রমাণীকরণের প্রয়োজন।

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


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

এটি রেল এবং কৌতুক
ম্যাট

কেন এফবি এপিআই (আইওএস ডিভাইস থেকে এবং সার্ভার থেকে একবার) একটি করে দুটি কল করার পরিবর্তে পুরো auth_hash পাস করবেন না?
বিসিদ্দিকী

1
আপনি যদি কোনও আলাদা ডিভাইস থেকে লগ ইন করতে চান (অর্থাত আপনার নিজের লেখকের টিকিট নেই)? এবং যদি আপনি কেবল একটি নতুন লেখকের টিকিট পান, তবে কাউকে পথে ফেসবুক আইডি / টোকেন হাইজ্যাক করতে এবং তার নিজের ডিভাইসে এটি ব্যবহার করতে বাধা দেয়?
অমিত্লোফ

কৌতূহলের বাইরে, 5 ধাপে, আপনার নিজের লেখকের টিকিট কেন জারি করবেন? আপনি কি প্রতিটি পরবর্তী সার্ভার কলের জন্য ফেসবুক অ্যাক্সেস টোকেন ব্যবহার করতে পারবেন না? আমি বুঝতে পারি যে এটির জন্য প্রথম অ্যাপ্লিকেশন -> সার্ভার কলের পরিবর্তে প্রতিটি অ্যাপ্লিকেশন -> সার্ভার কলের জন্য সার্ভার থেকে ফেসবুক এপিআইতে কল প্রয়োজন require
Anders

উত্তর:


80

আমি কেবল এটি নিজেই মোকাবিলা করেছি, এবং এই অংশটি আমাকে বিট করেছে:

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

আপনার ওয়েব পরিষেবায় লগ ইন করার পরে ফেসবুকে লগ ইন করতে এবং ফেসবুক আইডি এবং স্থানীয় অ্যাকাউন্টের মধ্যে সংযোগ ক্যাপচার করার একটি উপায় থাকা দরকার way

তা ছাড়াও আপনার পরিকল্পনাটি দৃ sounds় মনে হচ্ছে।

আপডেট : ফেসবুক একটি ডক যেমন একটি দৃশ্যকল্প outlining যোগ করেনি এখানে


7
হ্যাঁ, আমি এটি বিবেচনা করেছি এবং আপনি স্পট। যদি এটি একই ইমেল ঠিকানা হয় তবে আমরা অ্যাকাউন্টগুলিকে মার্জ করার পরিকল্পনা করছি এবং যদি তা না হয় তবে আমরা সেগুলিকে মার্জ করার জন্য আরও একটি উপায় তৈরি করব।
টিএমসি

অনুরোধটি করতে আপনি কোন সার্ভার লাইব্রেরিটি সার্ভারের পাশে ব্যবহার করছেন?
টিমলিউং

7
@ টিমলিউং - আমার উপলব্ধি হ'ল একটি অ্যাক্সেস টোকেন অ্যাপ্লিকেশন আইডি এম্বেড করে এবং এতে একটি অ্যাপ আইডি ছাড়া আপনার অ্যাক্সেস টোকেন থাকতে পারে না।
ড্যান রে

1
@ টিমলিউঞ্জ: আমরা ব্যবহারকারীর অ্যাক্সেস টোকেন সহ অনুরোধগুলির জন্য গ্রাফ এপিআই ব্যবহার করছি।
টিএমসি

29

আপনার সার্ভারে প্রমাণীকরণ টোকন প্রেরণ করতে https ব্যবহার করুন, যেমন ফেসবুকের বক্তব্য

অ্যাক্সেস টোকেন ভাগ করে নেওয়া

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


16

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

যদিও এটি খুব ক্ষতিকারক শোনায় না। সাধারণত লোকেরা / অ্যাপ্লিকেশনগুলি অ্যাক্সেস টোকেনগুলি ভাগ না করে সুরক্ষিত করার চেষ্টা করে।

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

এটি কিছুটা লম্বা শট, তবে আমি মনে করি এটি কার্যকর হতে পারে।

সম্পাদনা: দেখে মনে হচ্ছে অ্যাক্সেস টোকেন সর্বোপরি কার্যকর করার উপায় আছে। প্রশ্নের উপর @ দানিয়েলের উত্তর দেখুন ব্যবহারকারী অ্যাক্সেস টোকেন থেকে অ্যাপ্লিকেশন আইডি পান (বা একটি টোকেনের জন্য উত্স অ্যাপ্লিকেশনটি যাচাই করুন)


প্রেরণ appsecret_proofএটিকে রোধ করা উচিত ( এখানে দেখুন )
টনি

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

3
আপনি যাচাই করতে পারেন যে আপনার অ্যাপ্লিকেশনটির জন্য টোকেনটি তৈরি হয়েছিল https://graph.facebook.com/app/?access_token=[user_access_token]যার মাধ্যমে অ্যাপ্লিকেশন আইডিটি ফিরে আসে এবং তারপরে অ্যাপ্লিকেশন আইডির তুলনা করুন
নাদের আলেকজান

4

আপনার সমাধান সম্পূর্ণরূপে কাজ করে।

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


3
আমি সহজেই ক্লায়েন্টটি সার্ভারের সাথে কীভাবে কথা বলছে তা জানতে পারি। তারপরে আমি হিট না পাওয়া পর্যন্ত আমি এটিতে কেবল ইমেল নিক্ষেপ করতে পারি। সবসময় যাচাইয়ের কিছু ফর্ম থাকা দরকার
ক্রিস

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