সংক্ষিপ্ত বিবরণ
আমি আমার অ্যাপ্লিকেশনটির জন্য একটি (REST) এপিআই তৈরি করতে চাইছি। প্রাথমিক / প্রাথমিক উদ্দেশ্য মোবাইল অ্যাপ্লিকেশন (আইফোন, অ্যান্ড্রয়েড, সিম্বিয়ান, ইত্যাদি) এর ব্যবহারের জন্য হবে। আমি ওয়েব-ভিত্তিক APIs (অন্যান্য প্রয়োগগুলি অধ্যয়ন করে) এর জন্য প্রমাণীকরণ এবং অনুমোদনের জন্য বিভিন্ন প্রক্রিয়া অনুসন্ধান করেছি। আমি বেশিরভাগ মৌলিক ধারণাগুলি সম্পর্কে আমার মাথা জড়িয়ে ফেলেছি তবে এখনও কয়েকটি ক্ষেত্রে দিকনির্দেশ খুঁজছি। সর্বশেষ জিনিসটি আমি চাকাটি পুনরায় সঞ্চারিত করতে চাই, তবে আমি আমার মানদণ্ডের সাথে মানানসই এমন কোনও স্ট্যান্ডার্ড সমাধান খুঁজে পাচ্ছি না (তবে আমার মাপদণ্ডটি আমার বিভ্রান্ত করা উচিত তাই সমালোচনা করতে নির্দ্বিধায়ও বোধ করি)। অধিকন্তু, আমি চাই যে সমস্ত প্ল্যাটফর্ম / অ্যাপ্লিকেশনগুলি গ্রাস করে এটির জন্য API একই থাকে।
OAuth
আমি এগিয়ে যাব এবং আমার আপত্তিটি ওউথের সামনে ফেলে দেব কারণ আমি জানি যে সম্ভবত এটিই প্রথম প্রস্তাবিত সমাধান হবে। মোবাইল অ্যাপ্লিকেশনগুলির জন্য (বা আরও সুনির্দিষ্টভাবে ওয়েব-অ্যাপ্লিকেশন) প্রমাণীকরণের জন্য অ্যাপ্লিকেশনটি (কোনও ওয়েব-ব্রাউজারে যেতে) ছেড়ে যাওয়া ঠিক মনে হচ্ছে। অতিরিক্তভাবে, ব্রাউজারটির অ্যাপ্লিকেশনটিতে কলব্যাক ফেরানোর কোনও উপায় নেই (আমি সচেতন) (বিশেষত ক্রস প্ল্যাটফর্ম)। আমি এমন বেশ কয়েকটি অ্যাপ্লিকেশন জানি যা এটি করে তবে এটি কেবল ভুল বোধ করে এবং ইউএক্স অ্যাপ্লিকেশনটিতে বিরতি দেয়।
আবশ্যকতা
- ব্যবহারকারী ব্যবহারকারীর নাম / পাসওয়ার্ড প্রয়োগ করে।
- প্রতিটি এপিআই কল কলিং অ্যাপ্লিকেশন দ্বারা চিহ্নিত করা হয়।
- ওভারহেড একটি সর্বনিম্ন রাখা হয় এবং লেখকের দিকটি বিকাশকারীদের জন্য স্বজ্ঞাত।
- প্রক্রিয়াটি শেষ ব্যবহারকারীদের (তাদের লগইন শংসাপত্রগুলি প্রকাশিত হয় না) পাশাপাশি বিকাশকারী (তাদের অ্যাপ্লিকেশন শংসাপত্রগুলি প্রকাশিত হয় না) উভয়ের জন্যই সুরক্ষিত।
- যদি সম্ভব হয় তবে https প্রয়োজন নেই (কোনও উপায়ে কোনও কঠিন প্রয়োজন নয়)।
বাস্তবায়নের বিষয়ে আমার বর্তমান চিন্তাভাবনা
একটি বহিরাগত বিকাশকারী একটি API অ্যাকাউন্টের জন্য অনুরোধ করবে। তারা একটি apikey এবং apisecret পাবেন। প্রতিটি অনুরোধের জন্য কমপক্ষে তিনটি প্যারামিটারের প্রয়োজন হবে।
- apikey - নিবন্ধে বিকাশকারীকে দেওয়া
- টাইমস্ট্যাম্প - প্রদত্ত এপিকিটির জন্য প্রতিটি বার্তার এক অনন্য সনাক্তকারী হিসাবে দ্বিগুণ
- হ্যাশ - টাইমস্ট্যাম্পের একটি হ্যাশ + এপিসেক্রেট
অ্যাপিকে অনুরোধটি প্রদানকারী অ্যাপ্লিকেশনটি সনাক্ত করতে হবে। টাইমস্ট্যাম্পটি oauth_nonce এর অনুরূপ কাজ করে এবং পুনরায় প্লে আক্রমণগুলি এড়ায় / প্রশমিত করে। হ্যাশ নিশ্চিত করে যে অনুরোধটি প্রদত্ত এপিকির মালিকের কাছ থেকে আসলে জারি করা হয়েছিল।
অনুমোদিত অনুরোধগুলির জন্য (কোনও ব্যবহারকারীর পক্ষ থেকে সম্পন্ন করা), আমি এখনও অ্যাক্সেস_ টোকেন রুট বা একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড হ্যাশ কম্বোর সাথে যাওয়ার মধ্য দিয়ে অনিশ্চিত। যে কোনও উপায়ে, এক পর্যায়ে একটি ব্যবহারকারীর নাম / পাসওয়ার্ড কম্বো প্রয়োজন হবে। সুতরাং এটি যখন হয়, তথ্যের কয়েকটি টুকরো (এপিকে, এপিসেক্রেট, টাইমস্ট্যাম্প) এর একটি হ্যাশ + পাসওয়ার্ড ব্যবহার করা হত। আমি এই দিকটি সম্পর্কে মতামত চাই। এফওয়াইআই, তাদের প্রথমে পাসওয়ার্ড হ্যাশ করতে হবে, যেহেতু আমি আমার সিস্টেমে পাসওয়ার্ডগুলি হ্যাশ না করে সঞ্চয় করি না।
উপসংহার
এফওয়াইআই, কেবলমাত্র কোনও অ্যাপ্লিকেশনের মধ্যে থেকে প্রমাণীকরণ এবং অনুমোদন কীভাবে পরিচালনা করতে হয় সাধারণভাবে এটি কীভাবে এপিআই তৈরি / গঠন করা যায় তার একটি অনুরোধ নয়।
এলোমেলো চিন্তা / বোনাস প্রশ্ন
অনুরোধের অংশ হিসাবে কেবল অ্যাপিকেই প্রয়োজন এমন এপিআইগুলির জন্য, আপনি কীভাবে অপাইকির মালিক ব্যতীত অন্য কাউকে অ্যাপিকে (যেহেতু স্পষ্টভাবে প্রেরণ করা হয়েছে) দেখতে সক্ষম হতে বাধা দিয়েছেন এবং ব্যবহারের সীমা ছাড়িয়ে যাওয়ার জন্য অতিরিক্ত অনুরোধ করবেন? সম্ভবত আমি এটি ভাবতে পেরেছি, তবে অ্যাপিকে মালিকের কাছে একটি অনুরোধ যাচাই করা হয়েছিল যা প্রমাণ করার জন্য এখানে কিছু থাকা উচিত নয়? আমার ক্ষেত্রে, এপিসেক্রেটের উদ্দেশ্য ছিল, এটি কখনও ধাবিত না করে দেখানো / সংক্রমণিত হয় না।
হ্যাশ সম্পর্কে কথা বলতে বলতে, এমডি 5 বনাম এইচএমএকে-শ 1 সম্পর্কে কী বলা যায়? পর্যাপ্ত দীর্ঘ ডেটা (অর্থাত্ এপিসেক্রেট) দিয়ে সমস্ত মানগুলি হ্যাশ করা কি সত্যই আসে যায়?
আমি আগে আমার ব্যবহারকারীর পাসওয়ার্ড হ্যাশে একটি ব্যবহারকারী / সারি লবণ যুক্ত করার বিষয়ে বিবেচনা করেছি। যদি আমি এটি করতে পারি তবে অ্যাপ্লিকেশনটি লবণের ব্যবহার না করে কীভাবে কোনও ম্যাচিং হ্যাশ তৈরি করতে সক্ষম হবে?