Най-добри практики за изграждане на сигурни API ключове

Всички знаем колко ценни са API-тата. Те са порталът за изследване на други услуги, интегриране с тях и по-бързо изграждане на страхотни решения.

Може да сте изградили или мислите да изградите API за други разработчици, които да използват. API се нуждае от някаква форма на удостоверяване, за да осигури разрешен достъп до данните, които връща.

Днес има няколко стандарта за удостоверяване, като API ключове, OAuth, JWT и т.н.

В тази статия ще разгледаме как правилно да управлявате ключовете на API за достъп до API.

Така че защо API ключове?

API ключовете са лесни за използване, те са кратки, статични и не изтичат, ако не бъдат отменени. Те предоставят лесен начин за общуване на множество услуги.

Ако предоставите API за консумация на клиентите си, е от съществено значение да го изградите по правилния начин.

Нека започнем и ще ви покажа как да изградите API ключовете по правилния начин.

Генерация на ключове на API

Тъй като самият API ключ е идентичност, чрез която да се идентифицира приложението или потребителя, той трябва да бъде уникален, случаен и не може да се използва. Генерираните ключове за API трябва също да използват буквено-цифрови и специални символи. Пример за такъв ключ на API е zaCELgL.0imfnc8mVLWwsAawjYr4Rx-Af50DDqtlx.

Сигурно съхранение на ключове на API

Тъй като ключът API осигурява директен достъп до данни, това е почти като парола, която потребителят на уеб или мобилно приложение предоставя, за да получи достъп до същите данни.

Помисли за това. Причината, която трябва да съхраняваме API ключовете, е да се уверим, че ключът на API в заявката е валиден и издаден от нас (точно като парола).

Не е необходимо да знаем суровия ключ на API, но просто трябва да потвърдим, че ключът е правилен. Така че вместо да съхраняваме ключа в обикновен текст (лош) или да го криптираме, трябва да го съхраняваме като хеширана стойност в нашата база данни.

Хеширана стойност означава, че дори ако някой получи неоторизиран достъп до нашата база данни, не се изтеглят никакви ключове за API и всичко е безопасно. Крайният потребител ще изпрати суровия ключ за API във всяка заявка на API и ние можем да го валидираме, като хешираме ключа на API в заявката и сравним хеширания ключ с хеша, съхраняван в нашата база данни. Ето груба реализация на Java:

В горния код първичният ключ ще бъде комбинация от префикса и хеша на ключа на API {prefix}. {Hash_of_whole_api_key}.

Но дръжте, има още. Съхраняването на хеширана стойност носи специфични проблеми с използваемостта. Нека се обърнем към тези сега.

Представяне на API ключа на потребителите

Тъй като не съхраняваме оригиналния ключ на API, можем да го покажем само веднъж на потребителя в момента на създаването му. Затова не забравяйте да предупредите потребителите, че той не може да бъде извлечен отново и трябва да генерират нов маркер, ако забравят да копират ключа на API и да го съхранят безопасно. Можете да направите нещо подобно:

Показване на генериран API ключ с предупредително съобщение

Как потребителите могат да идентифицират генериран API ключ по-късно

Друг проблем е как потребителите идентифицират правилния API ключ в конзолата ви, ако трябва да го редактират или оттеглят. Това може да се реши чрез добавяне на префикс към ключа на API. Забележете на снимката над първите 7 знака (това е нашият префикс), разделени от точка.

Сега можете да съхранявате този префикс в базата данни и да го показвате в конзолата, така че потребителите да могат бързо да идентифицират правилния API ключ, като този:

API Key console за управление

Не давайте цялата мощ на API Key

Една често срещана грешка, която правят доставчиците на ключови API, е да предоставят един ключ за достъп до всичко, тъй като е лесно да се управлява. Не правете това. Да приемем, че потребителят просто трябва да прочете имейл и да генерира API ключ. Но този ключ вече има пълен достъп до други услуги, включително изтриване на записи в базата данни.

Правилният подход е да се позволи на крайните потребители да ограничат правилно достъпа до API Key и да изберат конкретни действия, които да може да извърши API ключ. Това може да се направи чрез предоставяне на обхвати, където всеки обхват представлява конкретно разрешение.

Например,

  • ако се нуждаете от API ключ, за да изпращате имейли, можете да генерирате ключ за API с обхвата като „email.send“
  • ако крайният потребител има няколко сървъра и всеки извършва конкретно действие, тогава може да се генерира отделен API ключ с определен обхват.

Така че докато създавате ключа за API, позволете на потребителите да избират какъв достъп трябва да има този ключ, както е на изображението по-долу.

По този начин потребителите могат да генерират множество API ключове, всеки със специфични правила за достъп за по-добра сигурност. И когато бъде получена заявка за API, можете да проверите дали ключът за API има правилния обхват за достъп до този API. Сега базата данни изглежда така:

Образование на база данни за ключови данни на API Key

Ограничаващи скоростта ключове за API

Да, може би вече го знаете, но е важно да оцените заявките за ограничение, направени с конкретни ключове за API, за да се гарантира, че няма лош актьор да свали вашите API сървъри или да предизвика проблеми с производителността, които засягат другите ви клиенти. Наличието на правилно решение за ограничаване на скоростта и мониторинг поддържа здравословната услуга на API.

заключение

API ключовете, когато са изградени правилно, все още са чудесен начин за комуникация с друг сървър. Както разгледахме в тази статия, спазването на определени практики предлага ползи както за потребителите на API, така и за доставчиците на API. Дано това ви помогне.

Честито осигуряване на вашите API!