নতুন এপিআই কী তৈরির জন্য সর্বোত্তম পদ্ধতির কী?


92

এখন প্রায় বিভিন্ন পরিষেবা সহ, গুগল এপিআই, টুইটার এপিআই, ফেসবুক এপিআই, ইত্যাদি।

প্রতিটি পরিষেবাদির একটি এপিআই কী রয়েছে, যেমন:

AIzaSyClzfrOzB818x55FASHvX4JuGQciR9lv7q

সমস্ত কীগুলি দৈর্ঘ্য এবং এগুলির মধ্যে থাকা অক্ষরগুলি পরিবর্তিত হয়, আমি ভাবছি একটি এপিআই কী উত্পন্ন করার জন্য সবচেয়ে ভাল উপায়টি কী?

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

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

এটি যদিও আমার কাছে কিছুটা হ্যাকি বলে মনে হচ্ছে, আরও কিছু ধারণা পাওয়ার আশা করে।


আমি এখানে আরও বিশদে উত্তর দিয়েছি
আনশু কুমার

উত্তর:


59

ক্রিপ্টোগ্রাফির জন্য ডিজাইন করা এলোমেলো নম্বর জেনারেটর ব্যবহার করুন। তারপরে বেস-64৪ নম্বরটি এনকোড করুন।

এটি একটি সি # উদাহরণ:

var key = new byte[32];
using (var generator = RandomNumberGenerator.Create())
    generator.GetBytes(key);
string apiKey = Convert.ToBase64String(key);

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

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

চমৎকার সমাধান, তবে আপনার সম্ভবত apiKey এর আগে var কীওয়ার্ড দরকার :) var apiKey = Convers.ToBase64String (key);
দাউদ ওহিয়া

@ জনএম 2 রাইট যেহেতু apiKeyঅন্য কোথাও ঘোষিত হতে পারে , আমি এটি উন্মুক্ত রেখে চলেছি। আমি স্বচ্ছতার জন্য টাইপ যুক্ত।
এডওয়ার্ড ব্রে 16

4
@ জেমস ওয়েয়ারজবা যদি আক্রমণটি ইতিমধ্যে আপনার ডেটাবেজে থাকে তবে তাদের আপনার API এ অনিরাপত্ত অ্যাক্সেস থাকা সম্ভবত আপনার উদ্বেগের মধ্যে সবচেয়ে কম ...
জোন স্টোরি

30

এপিআই কীগুলির এমন বৈশিষ্ট্য থাকতে হবে যা তারা:

  • কোনও অনুমোদিত API ব্যবহারকারীকে অনন্যভাবে সনাক্ত করুন - "এপিআই কী" এর "কী" অংশ
  • যে ব্যবহারকারীর অনুমোদন - অনুমান / জাল করা যাবে না
  • যদি কোনও ব্যবহারকারী দুর্ব্যবহার করে তবে তা প্রত্যাহারযোগ্য হতে পারে - সাধারণত তারা এমন একটি ডেটাবেজে কী করে যা একটি রেকর্ড মুছতে পারে।

সাধারণত আপনার হাজার হাজার বা কয়েক মিলিয়ন এপিআই কী থাকবে কোটি কোটি নয়, তাই তাদের দরকার নেই:

  • নির্ভরযোগ্যভাবে এপিআই ব্যবহারকারী সম্পর্কে তথ্য সঞ্চয় করুন কারণ এটি আপনার ডাটাবেসে সংরক্ষণ করা যেতে পারে।

যেমন, একটি এপিআই কী উত্পন্ন করার একটি উপায় হ'ল দুটি টুকরো তথ্য নেওয়া:

  1. স্বতন্ত্রতা গ্যারান্টি জন্য একটি ক্রমিক সংখ্যা
  2. কী প্যাড করার জন্য যথেষ্ট এলোমেলো বিট

এবং একটি ব্যক্তিগত গোপন ব্যবহার করে তাদের স্বাক্ষর করুন।

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

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


বা একটি এলোমেলো স্ট্রিং এর একটি হ্যাশ

হ্যাশিং জালিয়াতি প্রতিরোধ করে না। সাইন ইন করা কি গ্যারান্টি দেয় যে কী আপনার কাছ থেকে এসেছে।


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

4
@ সাপেনিন, হ্যাঁ আপনি যদি সার্ভারে একটি অদম্য কী সঞ্চয় করেন তবে আপনার জালিয়াতি রোধ করার দরকার নেই। প্রায়শই API অনুরোধে মেশিনে একটি খামার যে কোনো একটি দ্বারা পরিচালিত হয় - সার্ভার অনেক সার্ভার অন্যতম। কোনও ডাটাবেসে রাউন্ড ট্রিপ ছাড়াই যে কোনও মেশিনে স্বাক্ষর যাচাই করা যেতে পারে যা কিছু ক্ষেত্রে রেসের শর্ত এড়াতে পারে।
মাইক স্যামুয়েল

4
@ মাইকসামুয়েল যদি এপিআই কী স্বাক্ষরিত হয় এবং আপনি ডেটাবেসগুলিতে কোনও রাউন্ড ট্রিপ না করেন তবে কীটি বাতিল হয়ে গেলেও এপিআইতে অ্যাক্সেস ব্যবহার করার পরে কী হয়?
অভ্যুদিত জৈন

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

5

আমি ইউআইডিগুলি ব্যবহার করি, ড্যাশ ছাড়াই নিম্ন ক্ষেত্রে ফরম্যাটেড।

বেশিরভাগ ভাষাগুলি অন্তর্নিহিত হওয়ায় প্রজন্ম সহজ।

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


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

4
@ অ্যাডওয়ার্ড্রে UUID uuid = UUID.randomUUID();জাভা সম্পর্কে কি ? আপনি কি বলছেন যে এলোমেলো যথেষ্ট ভাল না?
মাইক্রো

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

4

আপনি যদি কেবলমাত্র বর্ণানুক্রমিক অক্ষরযুক্ত একটি API কী চান, আপনি কেবল বেস 64-এলোমেলো পদ্ধতির পরিবর্তে কেবল একটি বেস-62 এনকোডিং ব্যবহার করতে পারেন। বেস-62 এনকোডার উপর ভিত্তি করে তৈরি এই

public static string CreateApiKey()
{
    var bytes = new byte[256 / 8];
    using (var random = RandomNumberGenerator.Create())
        random.GetBytes(bytes);
    return ToBase62String(bytes);
}

static string ToBase62String(byte[] toConvert)
{
    const string alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    BigInteger dividend = new BigInteger(toConvert);
    var builder = new StringBuilder();
    while (dividend != 0) {
        dividend = BigInteger.DivRem(dividend, alphabet.Length, out BigInteger remainder);
        builder.Insert(0, alphabet[Math.Abs(((int)remainder))]);
    }
    return builder.ToString();
}

1

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

উইন্ডোজের পূর্ববর্তী সংস্করণগুলি অনুমানযোগ্য জিইউইডি তৈরি করেছিল, উদাহরণস্বরূপ, তবে এটি একটি পুরানো গল্প।


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