Взаимодействие десктопного приложения с веб-сервисом?
Где можно прочитать про протоколы взаимодействия десктопных приложений с веб-сервисами? В частности, интересует вопрос аутентификации и авторизации.
Вариант с OAuth не интересует, так как, насколько я понимаю, он требует от пользователя несколько большего количества телодвижений, кроме как вбить в настройки программы свои логин и пароль.
Например, URL, по которому открывается веб-сайт Dropbox по ссылке из контекстного меню, содержит какие-то параметры авторизации. То ли это идентификатор сессии, то ли какой-то API-key. Хотелось бы понять, откуда он берётся, и каков его жизненный цикл.
Или взять десктопного клиента Last.fm — не уверен, но навряд ли он на каждый запрос шлёт логин/пароль для аутентификации.
Может быть Evernote использует какой-нибудь стандартный подход? Ну и так далее.
> Например, URL, по которому открывается веб-сайт Dropbox по ссылке из контекстного меню, содержит какие-то параметры авторизации.
API dropbox'a тут: www.dropbox.com/developers/docs#api-specification
>Или взять десктопного клиента Last.fm — не уверен, но навряд ли он на каждый запрос шлёт логин/пароль для аутентификации.
Нет, приложение шлет запрос на ваторизацию и получает в ответ session_key, который потом оно в каждом запросе должно слать
полное описание API тут: www.last.fm/api/authspec
Или можно посмотреть на пимер кода тут: github.com/Voker57/qmpdclient/blob/master/src/lastfmsubmitter.cpp
В методе doHandshake() шлется запрос на авторизацию, потом в методе gotNetReply() получаем и обрабатываем ответ: m_session=data[1];
m_npUrl=data[2];
m_subUrl=data[3]; m_session потом шлем в POST-запросе на нужный УРЛ (в методах scrobbleQueued() и scrobbleNp(), на соответструющие url — m_subUrl или m_npUrl)
В API дропбокса сказано, что они намеренно не используют HTTP-методы PUT, DELETE и HEAD, т.к. с ними могут быть проблемы у некоторых HTTP-клиентов. Подобные опасения я встречал и раньше, только тоже без конкретики. Может быть и на этот счёт есть какая-то открытая информация, кто именно и что не поддерживает?