REST এপিআই লগইন প্যাটার্ন


181

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

আমি লগইন সিস্টেমে কাজ করছি, তবে ব্যবহারকারীদের লগইন করার সঠিক REST উপায় সম্পর্কে অনিশ্চিত। আমি এই মুহুর্তে সুরক্ষা নিয়ে কাজ করছি না, কেবল লগইন প্যাটার্ন বা প্রবাহ। (পরে আমরা এইচএমএসি ইত্যাদির সাহায্যে 2 পদক্ষেপ oAuth যুক্ত করব)

সম্ভাব্য বিকল্পসমূহ

  • ভালো লেগেছে একটি পোস্ট https://api...com/v1/login.json
  • একটি পুট মত কিছু https://api...com/v1/users.json
  • আমার কিছু না হলেও ...

ব্যবহারকারীদের লগ ইন করার জন্য উপযুক্ত REST শৈলীটি কী?


9
এটি প্রতিক্রিয়া ফর্ম্যাট। .জসন সার্ভারকে জসনের সাথে প্রতিক্রিয়া জানায়, .xML সার্ভারকে এক্সএমএল ফর্ম্যাট দিয়ে প্রতিক্রিয়া জানায়। বরং এটি এর পিছনে একটি alচ্ছিক পরামিতি করা? blog.apigee.com/detail/…
স্কট Roepnack

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

10
@ স্কটআরওপন্যাক তারপর আপনার Acceptএইচটিটিপি শিরোনাম বিবেচনা করা উচিত ।
আলেসান্দ্রো ভেন্ড্রুস্কোলো

2
@ ওবেদ আপনি যদি একটি Acceptশিরোনাম ব্যবহার করেন তবে আপনার কাছে একটিও রয়েছে Vary: Acceptতাই ক্যাচিং প্রভাবিত হবে না। কনটেক্স ইন এক্সটেনশনের আগে আলোচনা করা হয়েছে ; যদিও আমি সেখানে শনজিলার জবাবের সাথে একমত হই।
cmbuckley

2
@ ওডে - আমি বুঝতে পারছি না আপনি যদি ইউআরএলটিতে বিষয়বস্তুর ধরণ নির্দিষ্ট করে থাকেন (তবে প্রশ্নের পথের কাছে জাসন প্রত্যয় হিসাবে বা একটি টাইপ = জসন কোয়েরি পরম) হিসাবে কেন ক্যাচিংয়ের সুবিধা হারাবেন? এবং এই ক্ষেত্রে "আপনি" কে? কেচিং সুবিধাগুলি হারায় এমন ব্যক্তি কে? আমার কাছে মনে হয়েছে যে কোয়েরির পথ বা প্যারামগুলিতে যাই হোক না কেন যে কোনও প্রশ্নের ফলাফলগুলি ক্যাশে করা যায়।
চিজো

উত্তর:


138

রয় টি। ফিল্ডিং এবং রিচার্ড এন টেইলরের আধুনিক ওয়েব আর্কিটেকচারের নীতিগত নকশা , অর্থাৎ সমস্ত আরএসইটি পরিভাষা থেকে কাজের ক্রম এসেছে, ক্লায়েন্ট-সার্ভার ইন্টারঅ্যাকশনটির সংজ্ঞা রয়েছে:

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

এই সীমাবদ্ধতা চারটি কার্য সম্পাদন করে, প্রথম এবং তৃতীয়টি এই বিশেষ ক্ষেত্রে গুরুত্বপূর্ণ:

  • 1 ম : এটি সংযোগকারীদের অনুরোধের মধ্যে অ্যাপ্লিকেশনের অবস্থা ধরে রাখার যে কোনও প্রয়োজন সরিয়ে দেয় , এইভাবে শারীরিক সম্পদের ব্যবহার হ্রাস এবং স্কেলিবিলিটি উন্নত করে;
  • তৃতীয় : এটি কোনও মধ্যস্থতাকারীকে বিচ্ছিন্নভাবে একটি অনুরোধ দেখতে এবং বুঝতে সহায়তা করে , যা পরিষেবাগুলি গতিশীলভাবে পুনর্বিন্যাস করা হলে প্রয়োজনীয় হতে পারে;

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

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

এইচএমএসি বাস্তবায়নের অনেকগুলি উদাহরণ রয়েছে তবে আমি আপনাকে নিম্নলিখিত তিনটির দিকে মনোযোগ দিতে চাই:

এটি বাস্তবে কীভাবে কাজ করে

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

আশা করি এটি আপনাকে সঠিক সমাধান খুঁজে পেতে সহায়তা করবে!


23
একটি ম্যাক বার্তার সত্যতা প্রমাণ করার জন্য এবং এর সাথে টেম্পারিংয়ের বিরুদ্ধে রক্ষা করার জন্য - এর ব্যবহারকারীর প্রমাণীকরণের সাথে কোনও সম্পর্ক নেই
ইয়র্ক

1
পূর্বে " লগইন ইউআরএল " না জেনে ব্যবহারকারী / ক্লায়েন্ট প্রমাণীকরণ কীভাবে পরিচালনা করবেন তা উদাহরণগুলির মধ্যে একটি যোগ করেছে
আকিম

আরইএসটি পরিষেবাদির জন্য রাজ্যহীন লেখার উদাহরণ সহ আরও দুটি দুর্দান্ত নিবন্ধ এখানে দেওয়া হয়েছে: blog.jdriven.com/2014/10/… টেকনিক্যালেক্স.কম
ভ্লাদিমির রোজকভ

41

টিএল; ডিআর লগইন প্রতিটি অনুরোধের জন্য এপিআই সুরক্ষা বাস্তবায়নের জন্য প্রয়োজনীয় উপাদান নয়, প্রমাণীকরণ।

সাধারণভাবে সুরক্ষা সম্পর্কে কথা না বলে লগইন সম্পর্কে আপনার প্রশ্নের উত্তর দেওয়া শক্ত। কিছু প্রমাণীকরণ স্কিম সহ, কোনও traditionalতিহ্যগত লগইন নেই।

REST কোনও সুরক্ষা বিধি নির্দেশ করে না, তবে বাস্তবে সর্বাধিক সাধারণ বাস্তবায়ন হচ্ছে 3-উপায় অনুমোদনের সাথে OAuth (যেমন আপনি নিজের প্রশ্নে উল্লেখ করেছেন)। প্রতি সেপিতে কোনও লগ-ইন নেই, প্রতিটি API অনুরোধের সাথে অন্তত নয়। 3-মুখী লেখক সহ, আপনি কেবল টোকেন ব্যবহার করেন।

  1. ব্যবহারকারী এপিআই ক্লায়েন্টকে অনুমোদন দেয় এবং দীর্ঘকালীন টোকেন আকারে অনুরোধ করার অনুমতি দেয়
  2. এপিআই ক্লায়েন্ট দীর্ঘকালীন একটি ব্যবহার করে স্বল্প-কালীন টোকেন গ্রহণ করে।
  3. এপিআই ক্লায়েন্ট প্রতিটি অনুরোধের সাথে স্বল্প-কালীন টোকেন প্রেরণ করে।

এই স্কিমটি ব্যবহারকারীকে যে কোনও সময় অ্যাক্সেস প্রত্যাহার করার বিকল্প দেয়। কার্যত সমস্ত প্রকাশ্যে উপলভ্য RESTful API গুলি এটি প্রয়োগ করতে OAuth ব্যবহার করেছি uth

লগিনের ক্ষেত্রে আপনার সমস্যাটি (এবং প্রশ্ন) ফ্রেম করা উচিত বলে আমি মনে করি না, বরং সাধারণভাবে এপিআই সুরক্ষিত করার কথা ভাবেন।

সাধারণভাবে REST এপিআইয়ের অনুমোদনের বিষয়ে আরও তথ্যের জন্য, আপনি নিম্নলিখিত সংস্থানগুলি দেখতে পারেন:


হ্যাঁ, ওউথ! খুব সোজা উত্তর, গ্রহণযোগ্য উত্তর হওয়া উচিত, imho।
লেবীয়

26

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

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

তবে একটি আরএসটি এপিআই-র জন্য, লগইন স্ক্রিন এবং সেশন কুকিজগুলি কঠোরভাবে প্রয়োজনীয় নয়, যেহেতু প্রতিটি অনুরোধে কোনও মানব ব্যবহারকারীকে প্রভাবিত না করে শংসাপত্রগুলি অন্তর্ভুক্ত করতে পারে; এবং যদি ক্লায়েন্ট কোনও সময়ে সহযোগিতা না করে তবে একটি 401"অননুমোদিত" প্রতিক্রিয়া দেওয়া যেতে পারে। আরএফসি 2617 HTTP তে প্রমাণীকরণের সমর্থন বর্ণনা করে।

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

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


1
"যেহেতু প্রতিটি অনুরোধে কোনও মানব ব্যবহারকারীকে প্রভাবিত না করে শংসাপত্রগুলি অন্তর্ভুক্ত করতে পারে" 3-মুখী প্রমাণীকরণ এবং OAuth উদ্ভাবিত হয়েছিল কারণ উদ্ধৃতিতে থাকা জিনিসটি খারাপ। আপনি যদি সার্ভারে প্রত্যাহার করার জন্য কোনও প্রক্রিয়া ছাড়াই প্রতিটি অনুরোধের সাথে শংসাপত্রাদি সরবরাহ করেন তবে ডাব্লু / ও এসএসএল ব্যবহার করা এটি অনিরাপদ হবে।
স্লাভো

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

এবং যদি আপনি যে কোনও কারণে টিএলএস বা ওআউথ ব্যবহার না করে থাকেন তবে প্রতিবার ব্যবহারকারীর / পাসওয়ার্ডটি একবারে পাঠানোর চেয়ে কী খারাপ হয়? আক্রমণকারী যদি ব্যবহারকারী / পাসওয়ার্ড পেতে পারে তবে আক্রমণকারী সম্ভবত সেশন কুকিটি পেতে পারে can
ওয়াবেরি

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