Я также предоставляю REST API. Я использую комбинацию API-ключа, который всегда статичен и может быть подделан. Далее идет подпись, которая будет генерироваться на стороне клинета и проверяться на стороне сервера при каждом запросе. Подпись создается путем комбинации всех параметров и секретного пароля. это препятствует тому, чтобы человек посередине выполнил, например, тот же вызов с другим параметром.
Плохо только то, что поддельный запрос может быть отправлен снова. Я уже не знаю, как это предотвратить.