REST প্রমাণীকরণ এবং এপিআই কীটি উদ্ভাসিত করা হচ্ছে


94

আমি আরআরইএসটি পড়ছি এবং এটি সম্পর্কে এসও তে প্রচুর প্রশ্ন রয়েছে, পাশাপাশি অন্যান্য সাইট এবং ব্লগগুলিতেও রয়েছে। যদিও আমি এই নির্দিষ্ট প্রশ্নটি কখনও জিজ্ঞাসা করতে দেখিনি ... কিছু কারণে, আমি এই ধারণাটি সম্পর্কে আমার মন গুটিয়ে রাখতে পারি না ...

যদি আমি একটি রেস্টস্টুল এপিআই তৈরি করি এবং আমি এটি সুরক্ষিত করতে চাই, তবে আমি দেখেছি যে পদ্ধতিগুলির মধ্যে একটি হ'ল সুরক্ষা টোকেন ব্যবহার করা। আমি যখন অন্য এপিআই ব্যবহার করেছি, তখন একটি টোকেন এবং একটি ভাগ করা গোপনীয়তা রয়েছে ... তা বোঝা যায়। আমি যা বুঝতে পারি না তা হ'ল জাভাস্ক্রিপ্ট (এক্সএইচআর / আজাক্স) এর মাধ্যমে বিশ্রাম পরিষেবা পরিচালনার জন্য অনুরোধ করা হচ্ছে, ফায়ারব্যাগ (বা ব্রাউজারের "উত্স দেখুন") এর মতো সাধারণ কিছু দিয়ে কাউকে এটাকে স্নিগ্ধ করা থেকে বাঁচানোর কী? এপিআই কীটি অনুলিপি করা, এবং তারপরে কী এবং গোপন ব্যবহার করে সেই ব্যক্তির নকল করা?


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

4
যেহেতু আপনি প্রায় 2 বছর আগে জিজ্ঞাসা করেছেন: আপনি শেষ পর্যন্ত নিজেকে কী ব্যবহার করেছেন?
আরজান

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

উত্তর:


22

এপিআই সিক্রেট স্পষ্টভাবে পাস করা হয় না, গোপনীয়তা বর্তমান অনুরোধের চিহ্ন তৈরি করতে ব্যবহৃত হয় , সার্ভারের দিকে, সার্ভার একই প্রক্রিয়া অনুসরণ করে সাইন তৈরি করে, যদি দুটি সাইন মেলে, তবে অনুরোধটি সফলভাবে প্রমাণিত হয় - সুতরাং কেবলমাত্র সাইন অনুরোধ মাধ্যমে পাস করা হয়, গোপন নয়।


9
সুতরাং যদি এটি কেবল পাস হয়ে যাওয়া চিহ্নটি হয়ে যায় ... তবে এটি এখনও জাভাস্ক্রিপ্টে প্রকাশিত হয়নি ... সুতরাং আমি যদি তাদের ওয়েবপৃষ্ঠায় একটি ঝাঁকুনির ফটো তাদের এপিআইয়ের মাধ্যমে রাখি (জাভাস্ক্রিপ্ট দ্বারা ডাকা), এবং আপনি আমার পৃষ্ঠাতে যান, না ' আমি আমার পৃষ্ঠাটি দেখার জন্য কারও কাছে আমার এপিআই কীটি প্রকাশ করছি?
tjans

6
আমি মনে করি না যে আমি আমার প্রশ্নটি সঠিকভাবে জিজ্ঞাসা করছি ... সম্ভবত আমি প্রথমে যা খুঁজছিলাম তা আমি খুঁজে পাচ্ছিলাম না তার কারণ সম্ভবত। যখন আমি আমার এজ্যাক্স কল করি, জ্যাকোয়ারি ব্যবহার করে বলি, আমাকে অ্যাজিক্স কলটিতে এপিআই কীটি এম্বেড করতে হবে যাতে এটি সার্ভারে পৌঁছে যায় ... সেই সময়ে কেউ এপিআই কীটি দেখতে পাবে can যদি আমি সেই ভুলটি বুঝতে পারি, তবে কী কী ক্লায়েন্ট স্ক্রিপ্টে এম্বেড করা হয়নি তা যদি অনুরোধের সাথে API কী পাঠায়?
tjans

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

7
সুতরাং @ জেমস.এক্সইউ'র বক্তব্য যে 'বর্তমান অনুরোধের চিহ্ন তৈরি করতে গোপনীয়তা ব্যবহৃত হয়' তা মিথ্যা! কারণ ক্লায়েন্টটি গোপন বিষয়টি জানেন না, কারণ এটি তার কাছে প্রেরণ করা নিরাপদ হবে না (এবং কীভাবে তিনি তা জানতেন?) প্রযুক্তিগতভাবে 'প্রাইভেট কী' হ'ল গোপনীয়তা কেবলমাত্র সার্ভারের মাধ্যমে ব্যবহৃত হয় (কারণ) অন্য কেউ এটি জানেন না) ক্লায়েন্টের চিহ্নটির সাথে তুলনা করার জন্য একটি চিহ্ন তৈরি করতে। সুতরাং প্রশ্ন: 'এপিআই কী'র সাথে কী ধরনের ডেটা সংযুক্ত করা হচ্ছে যা ক্লায়েন্ট এবং সার্ভারের বাইরে অন্য কেউ জানে না? সাইন = এপি_কি + কি?
এসি 13

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

62

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

  • কী দেখানো হয়েছে তা নির্ধারণ করতে, আমাদের ব্যবহারকারীকে অবশ্যই আমাদের সাথে লগ ইন করতে হবে, তবে এটি আলাদাভাবে পরিচালনা করা হয়।

  • নির্ধারণ যেখানে ডেটা দেখানো হয় একটি সর্বজনীন API কী ডোমেইনের আমরা জানতে সীমা অ্যাক্সেস করতে ব্যবহার করা হয়, এবং সর্বোপরি ব্যক্তিগত ব্যবহারকারীর তথ্য নিশ্চিত করার প্রবন নয় CSRF

এই এপিআই কীটি অবশ্যই সবার কাছে দৃশ্যমান, আমরা আমাদের অংশীদারকে অন্য কোনও উপায়ে প্রমাণীকরণ করি না এবং আমাদের রেফারের প্রয়োজন নেই । তবুও, এটি সুরক্ষিত:

  1. যখন আমাদের get-csrf-token.js?apiKey=abc123অনুরোধ করা হয়:

    1. abc123ডাটাবেসে কীটি অনুসন্ধান করুন এবং সেই কীটির জন্য বৈধ ডোমেনগুলির একটি তালিকা পান।

    2. সিএসআরএফ বৈধতা কুকি জন্য সন্ধান করুন। যদি এটি বিদ্যমান না থাকে তবে একটি নিরাপদ র্যান্ডম মান উত্পন্ন করুন এবং এটি কেবলমাত্র HTTP- র সেশন কুকিতে রাখুন। কুকি যদি উপস্থিত না থাকে তবে বিদ্যমান এলোমেলো মানটি পান।

    3. এপিআই কী থেকে একটি সিএসআরএফ টোকেন এবং কুকি থেকে এলোমেলো মান তৈরি করুন এবং এতে স্বাক্ষর করুন । (সার্ভারে টোকেনের তালিকা রাখার পরিবর্তে আমরা মানগুলি স্বাক্ষর করছি Both উভয় মান স্বাক্ষরিত টোকেনে পাঠযোগ্য হবে, এটি ভাল))

    4. ক্যাশে না হওয়ার জন্য প্রতিক্রিয়া সেট করুন, কুকি যুক্ত করুন এবং স্ক্রিপ্টের মতো ফিরে আসুন:

      var apiConfig = apiConfig || {};
      if(document.domain === 'expected-domain.com' 
            || document.domain === 'www.expected-domain.com') {
      
          apiConfig.csrfToken = 'API key, random value, signature';
      
          // Invoke a callback if the partner wants us to
          if(typeof apiConfig.fnInit !== 'undefined') {
              apiConfig.fnInit();
          }
      } else {
          alert('This site is not authorised for this API key.');
      }
      

    মন্তব্য:

    • উপরেরগুলি কোনও সার্ভার সাইড স্ক্রিপ্টটিকে একটি অনুরোধ জাল করতে বাধা দেয় না, তবে কেবলমাত্র এটি নিশ্চিত করে যে কোনও ব্রাউজারের দ্বারা অনুরোধ করা থাকলে ডোমেনটি মেলে ।

    • জাভাস্ক্রিপ্ট জন্য একই মূল নীতি নিশ্চিত করে যে একটি ব্রাউজার লোড এবং তারপর জাভাস্ক্রিপ্ট সোর্স পরিদর্শন করা XHR (অ্যাজাক্স) ব্যবহার করতে পারবেন না। পরিবর্তে, একটি নিয়মিত ব্রাউজার কেবল এটি <script src="https://our-api.com/get-csrf-token.js?apiKey=abc123">(বা গতিশীল সমতুল্য) ব্যবহার করে লোড করতে পারে এবং তারপরে কোডটি চালানো হবে। অবশ্যই, উত্পন্ন জাভাস্ক্রিপ্টের জন্য আপনার সার্ভারের ক্রস-অরিজিন রিসোর্স ভাগ করে নেওয়া বা জেএসএনপি সমর্থন করা উচিত নয়

    • document.domainউপরের স্ক্রিপ্টটি লোড করার আগে একটি ব্রাউজার স্ক্রিপ্ট এর মান পরিবর্তন করতে পারে । কিন্তু একই উৎপত্তি নীতিটি কেবল দ্বারা ডোমেইন সংক্ষেপিত জন্য করতে পারবেন সরানোর উপসর্গ, rewriting মত subdomain.example.comমাত্র example.com, অথবা myblog.wordpress.comকরার wordpress.com, অথবা এমনকি কিছু কিছু ব্রাউজারে bbc.co.ukকরতে co.uk

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

  2. যখন কোনও ব্যবহারকারী লগ ইন করে, আপনার পছন্দমতো কিছু ব্যবহারকারীর কুকি সেট করুন। (জাভাস্ক্রিপ্টের অনুরোধ করার আগে ব্যবহারকারী ইতিমধ্যে লগ ইন করে থাকতে পারে))

  3. সার্ভারের পরবর্তী সমস্ত এপিআই অনুরোধে (জিইটি এবং জেএসএনপি অনুরোধগুলি সহ) সিএসআরএফ টোকেন, সিএসআরএফ বৈধতা কুকি এবং (লগ ইন থাকলে) ব্যবহারকারীর কুকি অন্তর্ভুক্ত থাকতে হবে। সার্ভারটি এখন অনুরোধটি বিশ্বাসযোগ্য কিনা তা নির্ধারণ করতে পারে:

    1. বৈধ সিএসআরএফ টোকেনের উপস্থিতি নিশ্চিত করে যে কোনও ব্রাউজার দ্বারা লোড করা থাকলে , প্রত্যাশিত ডোমেন থেকে জাভাস্ক্রিপ্ট লোড হয়েছিল।

    2. বৈধতা কুকি ছাড়াই সিএসআরএফ টোকেনের উপস্থিতি জালিয়াতি নির্দেশ করে।

    3. সিএসআরএফ টোকেন এবং সিএসআরএফ বৈধতা কুকি উভয়ের উপস্থিতি কিছুই নিশ্চিত করে না: এটি হয় নকল সার্ভার সাইড অনুরোধ, বা ব্রাউজারের একটি বৈধ অনুরোধ হতে পারে। (এটি কোনও অসমর্থিত ডোমেন থেকে তৈরি ব্রাউজারের অনুরোধ হতে পারে না))

    4. ব্যবহারকারীর কুকির উপস্থিতি নিশ্চিত করে যে ব্যবহারকারী লগইন করেছেন তবে ব্যবহারকারী প্রদত্ত অংশীদারের সদস্য কিনা তা নিশ্চিত করে না বা ব্যবহারকারী সঠিক ওয়েবসাইটটি দেখছে কিনা তাও নিশ্চিত করে না।

    5. সিএসআরএফ বৈধতা কুকি ছাড়াই ব্যবহারকারীর কুকির উপস্থিতি জালিয়াতি নির্দেশ করে।

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

      সুতরাং: সার্ভারটি এখন স্বাক্ষরযুক্ত টোকেন থেকে API কীটি নিরাপদে ব্যবহার করতে পারে।

    7. যদি কোনও মুহুর্তে সার্ভারটি অনুরোধের উপর বিশ্বাস না করে তবে একটি 403 নিষিদ্ধ ফিরিয়ে দেওয়া হয়। উইজেট ব্যবহারকারীকে সতর্কতা দেখিয়ে তাতে সাড়া দিতে পারে।

এটি সিএসআরএফ বৈধতা কুকিতে স্বাক্ষর করার দরকার নেই, কারণ আমরা এটি স্বাক্ষরিত সিএসআরএফ টোকনের সাথে তুলনা করছি। কুকিতে স্বাক্ষর না করা প্রতিটি HTTP অনুরোধকে ছোট করে তোলে এবং সার্ভারের বৈধতাটি আরও দ্রুত।

উত্পন্ন সিএসআরএফ টোকন অনির্দিষ্টকালের জন্য বৈধ, তবে কেবলমাত্র বৈধতা কুকির সাথে একত্রে কার্যকরভাবে ব্রাউজারটি বন্ধ না হওয়া পর্যন্ত কার্যকরভাবে কার্যকর।

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

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


4
CORS ব্যবহার করেন, তখন হয়তো এক নিরাপদে যে প্রসারিত করতে পারেন। উপরের পরিবর্তে, OPTIONSইউআরএল-এ কিছু সার্বজনীন এপিআই কী দিয়ে প্রাক-ফ্লাইটেড অনুরোধটি পরিচালনা করার সময় , সার্ভারটি কোনও ব্রাউজারকে বলতে পারে যে কোন ডোমেনগুলি অনুমোদিত (বা অনুরোধটি বাতিল করে)। যদিও কিছু অনুরোধগুলির প্রাক-ফ্লাইটেড অনুরোধের প্রয়োজন হয় না, বা মোটেও CORS ব্যবহার করা হবে না এবং এবং CORS এর জন্য IE8 + প্রয়োজন needs কিছু ফ্ল্যাশ ফ্যালব্যাক যদি আই 7 এর জন্য ব্যবহার করা হয়, তবে সম্ভবত কিছু গতিশীল এটির crossdomain.xmlজন্য এটি অর্জন করতে সহায়তা করতে পারে। আমরা এখনও সিওআরএস / ফ্ল্যাশ চেষ্টা করি নি।
আরজান

11

এই প্রশ্নের একটি স্বীকৃত উত্তর রয়েছে তবে কেবল স্পষ্ট করার জন্য, ভাগ করা গোপনীয় প্রমাণীকরণ এর মতো কাজ করে:

  1. ক্লায়েন্টের সার্বজনীন কী রয়েছে, এটি যে কারও সাথে ভাগ করা যায়, কিছু যায় আসে না, তাই আপনি এটি জাভাস্ক্রিপ্টে এম্বেড করতে পারেন। এটি সার্ভারে ব্যবহারকারীকে সনাক্ত করতে ব্যবহৃত হয়।
  2. সার্ভারের গোপন কী রয়েছে এবং এই গোপন সুরক্ষিত থাকা আবশ্যক। সুতরাং, ভাগ করা কী প্রমাণীকরণের জন্য আপনি আপনার গোপন কীটি সুরক্ষা দিতে পারবেন। সুতরাং একটি সরকারী জাভাস্ক্রিপ্ট ক্লায়েন্ট যা সরাসরি অন্য পরিষেবার সাথে সংযোগ করে তা সম্ভব হয় না কারণ গোপনীয়তা রক্ষা করতে আপনার একটি সার্ভার মিডলম্যানের প্রয়োজন।
  3. সার্ভারটি অনুরূপ কিছু অ্যালগরিদম ব্যবহার করে অনুরোধ করে যার মধ্যে গোপন কী (গোপন কীটি নুনের মতো সাজানো) এবং পছন্দসই একটি টাইমস্ট্যাম্পের পরে অনুরোধটি পরিষেবাতে প্রেরণ করে। টাইমস্ট্যাম্পটি "রিপ্লে" আক্রমণ রোধ করা prevent একটি অনুরোধের স্বাক্ষর কেবলমাত্র n সেকেন্ডের জন্য বৈধ । আপনি সার্ভারে টাইমস্ট্যাম্প শিরোনাম পেয়ে যাচাই করতে পারেন যা স্বাক্ষরটিতে অন্তর্ভুক্ত থাকা টাইমস্ট্যাম্পের মান থাকতে হবে। যদি সেই টাইমস্ট্যাম্পের মেয়াদ শেষ হয়ে যায়, অনুরোধটি ব্যর্থ হয়।
  4. পরিষেবাটি অনুরোধটি পায় যা কেবল স্বাক্ষরই নয়, সমস্ত ক্ষেত্রও সাদামাটা পাঠ্যে সাইন ইন করে।
  5. পরিষেবাটি তখন ভাগ করা গোপন কী ব্যবহার করে অনুরোধটি একইভাবে স্বাক্ষর করে এবং স্বাক্ষরের তুলনা করে।

সত্য, তবে ডিজাইন করে আপনার উত্তরটি API কীটি প্রকাশ করে না । যাইহোক, কিছু API গুলিতে API কী হয় সর্বজনীনভাবে দৃশ্যমান, এবং যে এর কি প্রশ্ন ছিল: "বিশ্রাম সেবা অপারেশন অনুরোধ [...] জাভাস্ক্রিপ্ট (XHR / আয়াক্স) মাধ্যমে করা" । (গ্রহণযোগ্য উত্তরও সে সম্পর্কে ভুল, আমি অনুভব করি; আপনার দ্বিতীয় পয়েন্টটি সে সম্পর্কে স্পষ্ট, ভাল।)
আরজান

2

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

আমার মতে এটি অত্যন্ত অনিরাপদ কারণ এটি সিস্টেমগুলির মধ্যে প্রমাণীকরণের উদ্দেশ্যকে পরাস্ত করে। যেহেতু কীটি ব্যবহারকারীর সামনে উন্মোচিত হবে, ব্যবহারকারী তার অনুমোদিত নয় এমন তথ্য পুনরুদ্ধার করতে পারে। কারণ একটি সাধারণ বিশ্রামে যোগাযোগের প্রমাণীকরণ কেবলমাত্র API কী এর উপর ভিত্তি করে।

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

আশা করি এটা কাজে লাগবে.


1

আমি মনে করি আপনার মানে আসল কীটি এপিআই কী নয়। এই সমস্যাটি HTTP প্রোটোকল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং সেশন হাইজ্যাকিং হিসাবে পরিচিত । সাধারণ "ওয়ার্কআরাউন্ড "টি কোনও ওয়েবসাইটের মতোই https এ পরিবর্তন করতে হয়।

আরইএসটি পরিষেবা সুরক্ষিতভাবে চালানোর জন্য আপনাকে অবশ্যই https সক্ষম করতে হবে এবং সম্ভবত ক্লায়েন্ট স্বীকৃতি। তবে সর্বোপরি, এটি বিশ্রামের ধারণার বাইরে। REST কখনই সুরক্ষার বিষয়ে কথা বলে না।


8
আমি আসলে চাবিটি বোঝাতে চাইছিলাম। যদি আমি সঠিকভাবে মনে রাখি, একটি এপিআই ব্যবহার করতে, আপনি এপিআই কীটি পাস করছেন এবং বাকী পরিষেবায় গোপন করছেন, সত্য? আমি জানি এটি একবার তারের পাশ দিয়ে গেছে এটি এসএসএল দ্বারা এনক্রিপ্ট করা হবে, তবে এটি পাঠানোর আগে এটি ক্লায়েন্ট কোড যা এটি ব্যবহার করে তা পুরোপুরি দৃশ্যমান ...
tjans

1

আপনি সার্ভারের পাশ দিয়ে যা করতে চান তা একটি মেয়াদোত্তীর্ণ সেশন আইডি উত্পন্ন করে যা ক্লায়েন্টকে লগইন বা সাইনআপে ফেরত পাঠানো হয়। ক্লায়েন্ট তারপরে অনুরোধগুলি সাইন করতে ভাগ করে নেওয়ার জন্য সেই অধিবেশন আইডিটি ব্যবহার করতে পারে।

সেশন আইডিটি কেবল একবারই পাস করা হয়েছে এবং এটি এসএসএল এর বেশি হওয়া উচিত।

এখানে উদাহরণ দেখুন

সেশন হাইজ্যাকিং রোধ করার জন্য অনুরোধটি স্বাক্ষর করার সময় একটি ননস এবং টাইমস্ট্যাম্প ব্যবহার করুন।


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