Как защитить частный REST API - PullRequest
       12

Как защитить частный REST API

13 голосов
/ 10 октября 2010

Я сейчас думаю о том, как я могу защитить свой REST API, который используется только моим мобильным приложением, от использования другими приложениями?Может ли API-ключ быть хорошим решением, потому что только я знаю секретный ключ API.Есть ли лучшее решение?

Ответы [ 2 ]

17 голосов
/ 11 октября 2010

Леон, ты продолжаешь упоминать "кто-то еще использует мой API с другим приложением". Итак, вы хотите связать свой API для использования только одним приложением? Таким образом, вы не хотите предоставлять права доступа пользователю, вместо этого вы хотите передать их экземпляру вашего приложения, работающему на мобильном устройстве пользователя.

По сути: вы не доверяете пользователю!

Что ж, в этом случае вам нужно убедиться, что ваше приложение является закрытым исходным кодом, нужно закодировать свои учетные данные в свое приложение таким образом, чтобы никто не мог получить их или сохранить учетные данные для него в специально зашифрованном виде на устройстве. ключ дешифрования для чтения только вашим приложением. В некотором смысле, вам нужно реализовать форму DRM, чтобы люди не могли делать что-то с данными на своем мобильном устройстве. И вам нужно надеяться, что никто не сможет реконструировать его.

Если ваше приложение станет достаточно популярным / интересным, рассчитывайте на то, что люди, которые очень и очень хорошо разбираются в подобных вещах, посмотрят на ваше приложение и сломают ваше шифрование, прежде чем вы его узнаете. Может быть, если вы приложите столько же усилий, сколько и в Skype, возможно, тогда вы сможете отложить их на некоторое время.

Но спросите себя: зачем? Почему я не доверяю своим пользователям? Стоит ли прыгать через подобные обручи, чтобы другие приложения не могли использовать мой API?

Просто проведите своего пользователя через процесс регистрации, в котором каждый экземпляр приложения получает уникальный ключ от сервера (или уникальный HTTP-пароль авторизации) и сохраняет его где-то на мобильном устройстве пользователя. Затем для доступа к интересным функциям в API требуется наличие этого ключа / пароля. Но не пытайтесь запутать или зашифровать ключ, когда храните его локально, это того не стоит. Если вы позже обнаружите неправильное использование, вы все равно можете отозвать права доступа для определенной учетной записи на сервере.

2 голосов
/ 10 октября 2010

Использовать HTTP-аутентификацию.REST - это использование средств, доступных в HTTP, поэтому следует использовать собственную аутентификацию HTTP.При базовой аутентификации вам придется использовать HTTPS.Если вы не можете сделать это, используйте HTTP-дайджест аутентификации или NTLM.

Все они имеют свои сильные и слабые стороны, и не каждый из них может поддерживаться вашим HTTP-сервером и клиентской библиотекой.

...