Как защитить RESTfull API от стороннего подключения?
Есть небольшое ВЕБ-приложение на JS, которое передает/получает json от API сервера. И в ходе работы возник достаточно наивный вопрос, какими же методами можно защитить:
- JS-скрипт от чтения (перелопатил кучу материала, гуглом пользоваться умею).
- Самое главное, обмен данными между клиентом и сервером (не шифрование протокола). Зная структуру передаваемых и получаемых данных - можно написать свой клиент и подключиться к API, вот этот момент надо пресечь.
Пока остановился на мысли о генерации временного API-key для каждого клиента на стороне сервера + привязка к сессии. Но опять же механизм запроса такого ключа можно скопировать и повторить. Надо что-то забористое и заковыристое.
Понимаю, что вопрос на уровне "три зеленых свистка вверх", но все же хотелось бы получить советов, в какую сторону копать?
З.Ы. И да, к сожалению простейшее решение проблемы в виде "используй связку логин/пароль для доступа к приложению", не подойдет. Данные свободно принимаются и передаются, авторизация производится - по желанию пользователя.
1. Версия клиента (зашитая в JS клиент) и токен-генерация (md5cram hmac с формулой на основе версии клиента)
2. JS-обфускация.
3. Периодическое обновление кода клиента.
Больше - ничего не спасёт особо.
А не подскажите как с помощью oauth можно фактически защитить само приложение от копирования?
Я написал в вопросе: при необходимости можно узнать и повторить структуру запросов к API. Нужно какое-то решение которое могло бы защитить механизм получения и приема данных от ненадежного источника (чужого приложения, в котором повторены запросы из оригинального приложения).