أفضل الممارسات لبناء مفاتيح API آمنة

نعلم جميعًا مدى قيمة واجهات برمجة التطبيقات. إنها بوابة استكشاف الخدمات الأخرى والتكامل معها وبناء حلول رائعة بشكل أسرع.

ربما تكون قد أنشأت أو تفكر في إنشاء واجهات برمجة تطبيقات للمطورين الآخرين لاستخدامها. يحتاج API إلى شكل من أشكال المصادقة لتوفير الوصول المصرح به إلى البيانات التي تقوم بإرجاعها.

هناك العديد من معايير المصادقة المتاحة اليوم مثل API Keys و OAuth و JWT وما إلى ذلك.

في هذه المقالة ، سنلقي نظرة على كيفية إدارة API Keys بشكل صحيح للوصول إلى واجهات برمجة التطبيقات.

فلماذا مفاتيح API؟

مفاتيح API سهلة الاستخدام ، فهي قصيرة وثابتة ولا تنتهي صلاحيتها ما لم يتم إبطالها. أنها توفر طريقة سهلة لخدمات متعددة للتواصل.

إذا قمت بتوفير واجهة برمجة تطبيقات (API) لعملائك للاستهلاك ، فمن الضروري أن تقوم ببنائها بالطريقة الصحيحة.

لنبدأ ، وسأوضح لك كيفية إنشاء مفاتيح API بالطريقة الصحيحة.

إنشاء مفتاح API

نظرًا لأن مفتاح API نفسه هو هوية يتم من خلالها تحديد التطبيق أو المستخدم ، يجب أن يكون فريدًا وعشوائيًا وغير قابل للتخمين. يجب أن تستخدم مفاتيح API التي تم إنشاؤها أيضًا أحرفًا أبجدية رقمية وأحرفًا خاصة. مثال على مفتاح API هذا هو zaCELgL.0imfnc8mVLWwsAawjYr4Rx-Af50DDqtlx.

تأمين تخزين مفتاح API

نظرًا لأن مفتاح واجهة برمجة التطبيقات يوفر وصولًا مباشرًا إلى البيانات ، فهو يشبه إلى حد كبير كلمة المرور التي يوفرها مستخدم الويب أو تطبيق الجوال للوصول إلى نفس البيانات.

فكر في الأمر. سبب حاجتنا إلى تخزين مفاتيح واجهة برمجة التطبيقات هو التأكد من أن مفتاح واجهة برمجة التطبيقات في الطلب صالح وصادر من قبلنا (تمامًا مثل كلمة المرور).

لا نحتاج إلى معرفة مفتاح API الأولي ، لكننا نحتاج فقط إلى التحقق من صحة المفتاح. لذا بدلاً من تخزين المفتاح في نص عادي (سيء) أو تشفيره ، يجب علينا تخزينه كقيمة مجزأة في قاعدة بياناتنا.

تعني القيمة المجزأة أنه حتى إذا حصل شخص ما على وصول غير مصرح به إلى قاعدة البيانات الخاصة بنا ، فلن يتم تسريب أي مفاتيح API وكلها آمنة. سيرسل المستخدم النهائي مفتاح API الخام في كل طلب API ، ويمكننا التحقق من صحته عن طريق تجزئة مفتاح API في الطلب ومقارنة المفتاح المجزأ مع التجزئة المخزنة في قاعدة البيانات الخاصة بنا. فيما يلي تنفيذ تقريبي لها في Java:

في الكود أعلاه ، سيكون المفتاح الأساسي مزيجًا من البادئة وتجزئة مفتاح API {prefix}.{hash_of_whole_api_key}.

لكن انتظر ، هناك المزيد. يؤدي تخزين قيمة مجزأة إلى مشاكل استخدام محددة. دعونا نتحدث عن هؤلاء الآن.

تقديم مفتاح API للمستخدمين

نظرًا لأننا لا نخزن مفتاح واجهة برمجة التطبيقات الأصلي ، يمكننا إظهاره مرة واحدة فقط للمستخدم وقت الإنشاء. لذا تأكد من تنبيه المستخدمين بأنه لا يمكن استرداده مرة أخرى ، وأنهم بحاجة إلى إنشاء رمز مميز جديد إذا نسوا نسخ مفتاح API وتخزينه بأمان. يمكنك فعل شيء مثل هذا:

كيف يمكن للمستخدمين تحديد مفتاح API الذي تم إنشاؤه لاحقًا

هناك مشكلة أخرى تتمثل في كيفية تحديد المستخدمين لمفتاح API الصحيح في وحدة التحكم الخاصة بك إذا كانوا بحاجة إلى تعديله أو إبطاله. يمكن حل ذلك عن طريق إضافة بادئة إلى مفتاح API. لاحظ في الصورة أعلاه الأحرف السبعة الأولى (هذه هي البادئة) ، مفصولة بالنقطة.

يمكنك الآن تخزين هذه البادئة في قاعدة البيانات وعرضها في وحدة التحكم حتى يتمكن المستخدمون من التعرف بسرعة على إدخال مفتاح واجهة برمجة التطبيقات الصحيح ، مثل هذا:

لا تمنح مفتاح API كل القوة

أحد الأخطاء الشائعة التي يرتكبها موفرو مفاتيح واجهة برمجة التطبيقات هو توفير مفتاح واحد للوصول إلى كل شيء ، لأنه من السهل إدارته. لا تفعل ذلك. افترض أن المستخدم يحتاج فقط إلى قراءة بريد إلكتروني ، ويقوم بإنشاء مفتاح API. لكن هذا المفتاح يتمتع الآن بحق الوصول الكامل إلى الخدمات الأخرى ، بما في ذلك حذف السجلات في قاعدة البيانات.

و الصحيح النهج هو السماح للمستخدمين النهائيين لتقييد الوصول بشكل صحيح API مفتاح واختيار الإجراءات المحددة التي مفتاح API يمكن القيام بها. يمكن القيام بذلك من خلال توفير النطاقات ، حيث يمثل كل نطاق إذنًا محددًا.

فمثلا،

  • إذا كنت بحاجة إلى مفتاح API لإرسال رسائل بريد إلكتروني فقط ، فيمكنك إنشاء مفتاح API بنطاق مثل "email.send"
  • إذا كان لدى المستخدم النهائي عدة خوادم وينفذ كل منها إجراءً محددًا ، فيمكن عندئذٍ إنشاء مفتاح API منفصل بنطاق محدد.

لذلك أثناء إنشاء مفتاح API ، اسمح للمستخدمين بتحديد الوصول الذي يجب أن يكون لمفتاح واجهة برمجة التطبيقات ، كما في الصورة أدناه.

بهذه الطريقة يمكن للمستخدمين إنشاء مفاتيح API متعددة ، لكل منها قواعد وصول محددة لتحسين الأمان. وعندما يتم تلقي طلب واجهة برمجة التطبيقات ، يمكنك التحقق مما إذا كان مفتاح واجهة برمجة التطبيقات لديه النطاق الصحيح للوصول إلى واجهة برمجة التطبيقات هذه. تبدو قاعدة البيانات الآن كما يلي:

معدل تقييد مفاتيح API

نعم ، ربما تعرف ذلك بالفعل ، ولكن من المهم تحديد معدل الطلبات التي يتم إجراؤها باستخدام مفاتيح واجهة برمجة تطبيقات معينة لضمان عدم تمكن أي فاعل سيئ من إزالة خوادم واجهة برمجة التطبيقات أو التسبب في مشكلات في الأداء تؤثر على عملائك الآخرين. إن وجود حل مناسب لتحديد المعدل والمراقبة يحافظ على سلامة خدمة API.

استنتاج

لا تزال مفاتيح API ، عند بنائها بشكل صحيح ، طريقة رائعة للتواصل مع خادم آخر. كما راجعنا في هذه المقالة ، فإن اتباع ممارسات معينة يوفر فوائد لكل من مستخدمي واجهة برمجة التطبيقات وموفري واجهة برمجة التطبيقات. آمل أن يساعدك هذا.

سعيد بتأمين واجهات برمجة التطبيقات الخاصة بك!