Al: еще забыл, по предотвращению повторных запросов:
1. Создаёте таблицу исторических запросов к API и логируйте каждый запрос, затем - проверяете по ней уникальность. (лучше, но медленнее)
2. ИЛИ/И Привязывайте сессию (токен) к IP-адресу клиента (хуже, но быстрее).
Лучше - сразу оба метода использовать.
Ну и всё это (весь обмен данными) - лучше шифровать данными авторизации/токеном.
А уже после - обернуть в SSL.
Al: мда... смотрите:
hash - это подпись Вашего запроса (аналог того, как Вы ставите подпись ручкой в документе).
То, под чем Вы расписываетесь - это параметры.
Чтобы проверить, что запрос к API выполнили именно Вы, передаёте на сервер:
параметр1,..,параметрN, hash, token, timestamp, random - вот эти параметры - передаются все в открытом виде (т.е. как есть)!
Пример формулы (*) формирования HASH на клиенте: HASH=md5(параметр1.параметрN.token.timestamp.random.password)
password - сервер знает и пересылать его не нужно!
Сервер получает этот запрос и сверяет время timestamp со своим серверным: что запрос не просрочен более, чем на сутки. (можно еще записывать в таблицу вызовов API и проверять уникальность запроса по HASH+token и частоту обращений к API, если это необходимо)
И после базовой проверки - проверяет HASH:
Берёт все параметры и создаёт HASH у себя по той же самой формуле (*) из присланных параметров и получает свой вариант SHASH (server-hash).
Затем - сравнивает абсолютно: if (HASH===SHASH) => если да: значит исполняет запрос, нет - генерит ошибку.
Al: нет такого понятия как "подписанная сессия". сессия или анонимная или авторизованная, а запрос - подписанный.
Советую почитать (погуглить) основные принципы создания API для сервисов.
dhat: Аргументы просты: судя по документации, он не рассчитан он на большие приложения, а рассчитан только как вспомогательная библиотека, иначе были бы и примеры, и не было бы подобных вопросов.
1. Создаёте таблицу исторических запросов к API и логируйте каждый запрос, затем - проверяете по ней уникальность. (лучше, но медленнее)
2. ИЛИ/И Привязывайте сессию (токен) к IP-адресу клиента (хуже, но быстрее).
Лучше - сразу оба метода использовать.
Ну и всё это (весь обмен данными) - лучше шифровать данными авторизации/токеном.
А уже после - обернуть в SSL.