Как защитить частный API REST
Я сейчас думаю, как я могу защитить свой REST API, который используется только моим мобильным приложением из других приложений?
Может ли API-ключ быть хорошим решением, потому что только я знаю секретный ключ API.
Есть ли лучшее решение?
Ответы
Ответ 1
Использовать проверку подлинности HTTP. REST - все об использовании средств, доступных в HTTP, поэтому должен использоваться собственный HTTP-аутентификатор. Однако при базовой аутентификации вам придется использовать HTTPS. Если вы не можете сделать это, используйте HTTP digest auth или NTLM.
Все они имеют разные сильные и слабые стороны, и не каждый из них может поддерживаться вашим HTTP-сервером и клиентской библиотекой.
Ответ 2
Леон, вы продолжаете упоминать "кто-то другой, использующий мой API с другим приложением". Итак, вы хотите связать свой API, который будет использоваться только одним приложением? Таким образом, вы не хотите предоставлять права доступа пользователю, вы хотите предоставить их вместо экземпляра вашего приложения, запущенного на мобильном устройстве пользователя.
В сущности: вы не доверяете пользователю!
Ну, в этом случае вам нужно убедиться, что ваше приложение закрыто исходным кодом, необходимо закодировать свои учетные данные в своем приложении таким образом, чтобы никто не мог их восстановить или сохранить для него учетные данные в специально зашифрованном виде на устройстве, ключ дешифрования для того, чтобы он был доступен только для вашего приложения. В некотором смысле вам необходимо внедрить форму DRM, чтобы люди не могли делать вещи с данными на своем мобильном устройстве. И вам нужно надеяться, что никто не сможет его перестроить.
Если ваше приложение становится популярным/интересным, рассчитывайте на то, что люди, которые очень, очень хорошо разбираются в этом, будут смотреть на ваше приложение и разорвут ваше шифрование, прежде чем вы это узнаете. Может быть, если вы вложите в нее столько же усилий, сколько у Skype, может быть, тогда вы сможете отложить их на некоторое время.
Но спросите себя: зачем беспокоиться? Почему я не доверяю своим пользователям? Действительно ли стоит перепрыгивать через обручи, подобные этому, чтобы предотвратить использование какого-либо другого приложения моим API?
Просто заведите своего пользователя через процесс регистрации, в котором каждый экземпляр приложения получает уникальный ключ с сервера (или уникальный пароль аутентификации HTTP) и сохраняет его где-то на мобильном устройстве пользователя. Затем для доступа к интересным функциям API требуется наличие этого ключа/пароля. Но не переходите через крайнюю длину, чтобы запутать или зашифровать ключ, когда вы храните его локально, это не стоит. Если вы все позже обнаружите неправильное использование, вы всегда можете отменить права доступа для определенной учетной записи на сервере.