Вот уже который день разбираюсь в протоколе OAuth и никак в моей голове не уложится один момент:
Предположим, есть у меня некий сервис с REST API и OAuth-сервер. Я создаю десктоп (или мобильное) приложение, регистрирую его на OAuth-сервере и получаю сгенерированные им app_id и app_secret, которые впоследствии использую для получения токена. Предположим, мое приложение будет раз в минуту отсылать лог работы на сервис (методом POST), и работать оно должно 24/7 без вмешательства человека, а значит токен мне нужен бессрочный. Далее значит получаю я токен и начинаю работать с сервисом. При этом, как я понимаю, и app_id и app_secret и токен должны где-то хранится. В случае десктоп приложения это, например, конфигурационный файл или реестр Windows. Соответственно, эти данные можно скомуниздить и использовать в нехороших целях, например, тупо заDDoSить мой сервис каким нибудь сторонним приложением.
Нет, каждый запрос шифруеться нашим secret, secret никуда не передаеться. Токен в oauth на самом деле присутствует толкьо в 3-legged режиме. Это идентификатор пользователя (третего лица). И он зашифрован. Украсть его не получиться. Надо украть secret и знать алгоритм шифрования, что бы расшифровать его. Если у вас система расчитана только на 2 участника, то разумнее использовать 2-legged.
Ну это нужно реализовать, или взять готовое решение. Я когда реализовывал на PHP брал готовую либу, для сервера и клиента. Клиент есть и в Zend_Framework, пожно почитать спецификацию и реализовтаь самому, если нет готового решения.
Сделайте ограничение не более 3х запросов в секунду, как это сделано во Vkontakte API. Можно еще сделать проверку, если запросы слишком часто — то делать токен недействительным, соответственно пользователю придется заново аутентифицироваться, когда он захочет воспользоваться вашим приложеним.
Это вариант решения «проблемы», которую я описал и я о решениях тоже думал. Но суть вопроса была в том, а не выдумал ли я эту проблему, может я просто неверно рассуждаю. Ведь люди, разрабатывающие данный протокол должно быть не глупы и тоже думают о таких вещах.
На самом деле, он не такой то уж сложный :) там все довольно просто и можно реализовать самому, если не надо никуда торопиться. Тут все описано oauth.net/core/1.0a. Можно посмотреть тежи либы на других языках, и просто попробовать портировать их.