REST এপিআই প্রমাণীকরণ


181

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

উদাহরণস্বরূপ, যখন কোনও ব্যবহারকারী লগ ইন করে তারপরে ফোরামের বিষয় তৈরি করতে চায়। আমি কীভাবে জানব যে ব্যবহারকারী ইতিমধ্যে লগ ইন করেছেন?


4
আপনার সম্ভবত এখানে "REST প্রমাণীকরণ" অনুসন্ধান করা উচিত। এটি অন্যান্য অনেক প্রশ্নের মধ্যে আবৃত হয়েছে।
ব্রায়ান কেলি

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


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

1
@ s3v3n আমি ভুল হলে আমাকে সংশোধন করুন তবে আপনার এবং আমার পরামর্শ উভয়ই একই জিনিসকে প্রভাবিত করার জন্য শিরোনাম + স্থানীয় স্টোরেজ কম্বো ব্যবহারের বিভিন্ন উপায়। এটি Authorizationশিরোনাম + যেমন ব্রাউজার লোকালস্টোরেজ ভিএস Cookieশিরোলেখ + স্ট্যান্ডার্ড ব্রাউজার কুকি স্টোরেজ।
10

উত্তর:


72

আপনি HTTP বেসিক বা ডাইজেস্ট প্রমাণীকরণ ব্যবহার করতে পারেন। আপনি এটির শীর্ষে এসএসএল ব্যবহার করে ব্যবহারকারীদের সুরক্ষিতভাবে প্রমাণীকরণ করতে পারেন, তবে এটি API কে কিছুটা কমিয়ে দেয়।

  • বেসিক প্রমাণীকরণ - ব্যবহারকারীর নাম এবং পাসওয়ার্ডে বেস 64 এনকোডিং ব্যবহার করে
  • ডাইজেস্ট প্রমাণীকরণ - তাদের নেটওয়ার্কে প্রেরণের আগে ব্যবহারকারীর নাম এবং পাসওয়ার্ড hashes।

ওআউথ এটি পেতে পারে সেরা। ওআউথ যে সুবিধা দেয় তা হ'ল প্রত্যাহারযোগ্য বা মেয়াদোত্তীর্ণ টোকেন। কীভাবে প্রয়োগ করা যায় সে সম্পর্কে নিম্নলিখিতটি উল্লেখ করুন: মন্তব্যগুলি থেকে কার্যকারী লিঙ্ক: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf


4
দয়া করে এই প্রশ্নটি এবং লেস হ্যাজেলউড (অ্যাপাচি শিরোর লেখক) প্রদত্ত উত্তরটি পড়ুন।
justin.hughey

1
দরকারী লিঙ্কটি কীভাবে টুইটার এটির বিশদ এপিআই সুরক্ষা দেয়
ওয়াইল্ডদেভ ২

এটি গ্রহণযোগ্য উত্তর হওয়ায় আমি উল্লেখ করা জরুরী মনে করি যে আপনি ডাইজেস্ট প্রমাণীকরণও ব্যবহার করতে পারেন। বেসিক এবং ডাইজেস্ট প্রমাণীকরণের মধ্যে পার্থক্য সম্পর্কে এখানে পড়ুন: stackoverflow.com/questions/9534602/…
রায় রাডেড

116

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

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

অ্যামাজন এডাব্লুএস কীভাবে প্রমাণীকরণ করে তা পরীক্ষা করে দেখুন। এটি একটি এপিআই থেকে অন্য এপিআই-তে "বাককে পাশ কাটিয়ে দেওয়ার" নিখুঁত উদাহরণ।

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

  1. একটি লগইন / লগআউট এপিআই তৈরি করুন: /api/v1/loginএবংapi/v1/logout
  2. এই লগইন এবং লগআউট এপিআইগুলিতে, আপনার ব্যবহারকারীর স্টোরের সাথে প্রমাণীকরণটি সম্পাদন করুন
  3. ফলাফলটি একটি টোকেন (সাধারণত, JSESSIONID) যা ক্লায়েন্টকে ফেরত পাঠানো হয় (ওয়েব, মোবাইল, যাই হোক না কেন)
  4. এই বিন্দু থেকে আপনার ক্লায়েন্ট কর্তৃক করা সমস্ত পরবর্তী কলগুলিতে এই টোকেন অন্তর্ভুক্ত থাকবে
  5. ধরা যাক আপনার পরবর্তী কলটি কল করা একটি API এ করা হয়েছে /api/v1/findUser
  6. এই এপিআই কোডটি প্রথম যেটি করবে তা হ'ল টোকেনটি পরীক্ষা করা ("এই ব্যবহারকারী কি প্রমাণিত?")
  7. যদি উত্তরটি NO হিসাবে ফিরে আসে তবে আপনি ক্লায়েন্টের কাছে একটি HTTP 401 স্থিতি ফেলে দিন। তারা এটি পরিচালনা করতে দিন।
  8. যদি উত্তর হ্যাঁ হয়, তবে অনুরোধ করা ব্যবহারকারীকে ফেরত পাঠান

এখানেই শেষ. আশাকরি এটা সাহায্য করবে.


সুতরাং আপনি যা বর্ণনা করছেন তা মূলত একটি সেশন কুকি, তাই না?
লর্ডঅফ দ্য পিপস

হ্যাঁ, তবে অধিবেশনটি 2 টি পৃথক স্থানে "রক্ষণাবেক্ষণ" করা হয়। একটি এপিআই সার্ভারে, অন্যটি ব্রাউজারে। ব্রাউজার পোস্টে JSON (বা যাই হোক না কেন) প্রতিক্রিয়া সফল লগইন এপিআই সার্ভারের সেশন আইডিটি ব্রাউজারে ফিরে যোগাযোগ করা উচিত। এই সেশনগুলি স্বতন্ত্রভাবে তাদের নিজ নিজ এজেন্ট দ্বারা পরিচালিত হয়।
কিংজ

11
আমি বিশ্বাস করি যে অধিবেশন বজায় রাখার ব্যবস্থাটি ইচ্ছাকৃতভাবে অস্পষ্ট যে ধারণাটি প্রবর্তনের চেষ্টা করেছিল কিংজ। একটি সেশন কুকি সেই প্রক্রিয়াটির কেবল একটি বাস্তবায়ন।
justin.hughey

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

1
ম্যান-ইন-দ্য-মধ্য-অ্যাট্র্যাকের ক্ষেত্রে সেশন হাইজ্যাকিং কীভাবে রোধ করা যায়?
m0z4rt

38
  1. ক্লায়েন্টদের অনুমোদনের জন্য এইচটিটিপি বেসিক অ্যাথ ব্যবহার করুন তবে ব্যবহারকারীর নাম / পাসওয়ার্ডটি কেবল অস্থায়ী সেশন টোকেন হিসাবে বিবেচনা করুন ।

    সেশন টোকেনটি প্রতিটি এইচটিটিপি অনুরোধের সাথে সংযুক্ত কেবল একটি শিরোনাম , উদাহরণস্বরূপ: Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0

    উপরের Ym9ic2Vzc2lvbjE6czNjcmV0 স্ট্রিংটি কেবল "bobsession1: s3cret" (যা ব্যবহারকারীর নাম / পাসওয়ার্ড) বেস 64 এ এনকোড করা আছে।

  2. উপরের অস্থায়ী সেশন টোকনটি পেতে, একটি API ফাংশন সরবরাহ করুন (উদা http://mycompany.com/apiv1/login:) যা মাস্টার-ব্যবহারকারীর নাম এবং মাস্টার-পাসওয়ার্ডকে একটি ইনপুট হিসাবে গ্রহণ করে, সার্ভারের পাশে একটি অস্থায়ী এইচটিটিপি বেসিক এথন ব্যবহারকারীর নাম / পাসওয়ার্ড তৈরি করে এবং টোকেনটি প্রদান করে (যেমন: Ym9ic2Vzc2lvbjE6czNjcmV0)। এই ব্যবহারকারীর নাম / পাসওয়ার্ডটি অস্থায়ী হওয়া উচিত, এটি 20 মিনিটের পরে বা তারও শেষ হতে হবে।

  3. অতিরিক্ত সুরক্ষার জন্য আপনার আরএসটি পরিষেবাটি এইচটিটিপিএসের মাধ্যমে পরিবেশন করা হয়েছে যাতে তথ্য বর্ধিত স্থানান্তর না হয়

আপনি জাভাতে থাকলে স্প্রিং সিকিউরিটি লাইব্রেরি উপরের পদ্ধতিটি প্রয়োগ করতে ভাল সহায়তা সরবরাহ করে


1
এটি 20 মিনিটের পরে কেন শেষ হবে? ফেসবুকের মতো কোনও ওয়েবসাইট যদি ব্যবহারকারী লগ আউট না করে লগইন হয়?
দেজেল

1
@ দেজেল আমি অনুমানের অধীনে ছিল "অধিবেশন" প্রকৃতিগতভাবে অস্থায়ী। ব্যবহারকারী
অলস

বেস 64 কি জন্য? আপনি কেবল অস্থায়ী পাসওয়ার্ড ফিরিয়ে দিতে পারেন। উভয় ক্ষেত্রেই, আসলে কী গুরুত্বপূর্ণ তা এই অস্থায়ী পাসওয়ার্ডটি শক্ত। পরীক্ষা করে দেখুন security.stackexchange.com/a/19686/72945
e18r

7

আমি মনে করি OAuth2 ব্যবহার করা সবচেয়ে ভাল উপায়। এটি গুগল করুন এবং এটি সেট আপ করতে আপনাকে সহায়তা করার জন্য আপনি প্রচুর দরকারী পোস্ট পাবেন।

ওয়েব অ্যাপ বা একটি মোবাইল অ্যাপ্লিকেশন থেকে আপনার এপিআই-র জন্য ক্লায়েন্ট অ্যাপ্লিকেশনগুলি বিকাশ করা আরও সহজ করবে make

আশা করি এটি আপনাকে সহায়তা করবে।


2
দয়া করে এই প্রশ্নটি এবং লেস হ্যাজেলউড (অ্যাপাচি শিরোর লেখক) এর উত্তরটি পড়ুন।
justin.hughey

0

আমি জেডাব্লুটি প্রমাণীকরণ ব্যবহার করছি। আমার আবেদনে ঠিক কাজ করে।

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

এই টোকেনটি অবশ্যই অনুরোধের শিরোনামে আমার ওয়েব এপিআইতে অন্য প্রতিটি পদ্ধতিতে প্রেরণ করতে হবে।

এটি বাস্তবায়ন করা বেশ সহজ এবং পরীক্ষা করা খুব সহজ।

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