Як тільки ви випустите програму, вона може бути розроблена зворотним. Це означає, що ви нічого не можете зробити, щоб бути на 100% захищеним, якщо однаковий додаток (ті самі бінарні файли, ті ж налаштування) поширюється на всіх ваших користувачів.
Якщо ви можете налаштувати програму для кожного користувача, у вас є шанс, можливо, не заборонити якійсь іншій програмі використовувати ваш API, але принаймні обмежити цю програму кількістю запитів, які вона може зробити до API.
Уявіть таку схему:
- Клієнт підключає та надсилає свій унікальний ідентифікатор (один ідентифікатор за користувачем).
- Сервер відповідає, надсилаючи виклик, зашифрований відкритим ключем. Цей відкритий ключ пов’язаний з унікальним ідентифікатором, надісланим раніше.
- Клієнт вирішує проблему, розшифровуючи дані за допомогою приватного ключа, і відсилає розшифровану таємницю просто на сервер.
- Сервер перевіряє, що поданий секрет відповідає первісно створеному.
Розробник, який зламає вашу програму та успішно отримає приватний ключ, зможе використовувати ваш API з його власного додатку, але він буде ідентифікатором як ваш для вашого сервера.
Якщо один і той же користувач може робити 10 000 запитів до вашого API в день і в середньому, активний користувач робить 2 000 запитів на день, це означає, що цей розробник зможе сам використовувати його додаток і, можливо, надіслати його своїм друзям, але він не зможе, скажімо, продати її тисячам людей, тільки тому, що це спрацює лише кілька хвилин ранку.
Хоча це допомагає, це не є 100% доказом. Що робити, якщо хакер знайде спосіб вилучити приватний ключ із вашого додатка, коли на його пристрої встановлено його власне додаток?
Бічна примітка, яка не відповідає на ваше запитання, але все ж може бути корисною: не думайте про API як інструмент для вашого основного продукту (мобільний додаток). Подумайте про це як про продукт першого класу , продукт, який може бути оплачений. Цю ж модель роками використовують Amazon та Google, її починає активно використовувати Microsoft з Azure тощо.
Як тільки ви розглядаєте API не як вторинний інструмент, зведений до рабства для своїх блискучих нових мобільних додатків, а власне продукт, на тому ж рівні, що і будь-яка програма, яку насправді бачить користувач, ви починаєте менше думати про те, як захистити API від використання іншими програмами та більше про монетизацію самого API . Такий API може використовуватися вашими програмами, які є його клієнтами, або будь-якими іншими програмами, які вільно розробляє кожен. Це має ряд переваг:
Скласти API таким чином, щоб його використовували лише ваші програми, дуже складно і дорого. Цей час і гроші можна використати на щось більш корисне.
Відкриття API для громадськості може принести велику користь і для вас, і для світу. Уявіть, що ви чудовий архітектор і чудовий розробник, тому ви створили дивовижно чудовий API, але ваші візуальні дизайнерські навички вичерпані, і ви насправді нічого не розумієте щодо дизайну взаємодії тощо. Якщо ви ховаєте свій API, єдиний люди будуть знати, що ви створили мобільний додаток, який є непридатним і некрасивим. Якщо ваш API публічний, інші розробники будуть приваблювати його якістю та писати для нього чудові програми, приносячи вам багато грошей.
Ви ніколи не уявляєте, як інші люди можуть використовувати ваші API. Це те, що сталося з Kinect. Спочатку Microsoft створила Kinect для ігор. Коли Microsoft відкрила API для громадськості, вони ніколи не уявляли, що через кілька років він буде використаний науковими програмами, сектором охорони здоров'я тощо. Це схоже на веб-API: чим більше розробників використовують, тим ширшими будуть ідеї.