ICQ HTTP API: Авторизация

Авторизация. Часть 2

Продолжая тему webAPI ICQ сегодня опишу способы авторизации более подробно. Помимо схемы описанной в предыдущей статье, получить заветный token можно следующим способом:

Авторизация через api.login.icq.net:

URL https://api.login.icq.net/auth/clientLogin
HTTP Method POST
Параметры:
Параметр Тип Описание
devId обязат. Идентификатор клиента, требуется для доступа к API
f обязат. Требуемый формат ответа (json, xml, qs или php)
s обязат. loginID пользователя (UIN, mail, номер телефона)
language опцион. Требуемый язык для возвращаемых сообщений ответа/ошибок.
Используемый формат <lang>-<locale>.
Если недоступно, то язык будет извлечен из HTTP заголовка (Accept-Language) и, при недоступности последнего, будет использован по умолчанию «en-us».
tokenType опцион. shortterm (время жизни токена 24 часа – по умолчанию) или longterm (действителен 1 год) или любое беззнаковое целое (unsigned long) значение, представляющее необходимое время жизни токена в секундах
c опцион. Калбэк, применяемый при использовании JSONP (f = json)
r опцион. значение параметра возвращается в ответе в requestId
pwd опцион. Пароль
idType опцион. аутентификация пользователя ICQ
clientName опцион. Имя клиента
clientVersion опцион. Версия клиента

pwd – пароль лучше отправлять в кодированном виде – StrToHex(UTF-8), для примера, пароль вида df^r!3$ будет выглядеть так: %EF%BB%BF%64%66%5E%72, это позволит избежать проблем со спецсимволами.

Если пароль и loginID проходят валидацию (исключение авторизация с использованием анонимной сессии), то в ответ приходит примерно такой текст:


  200
  OK
  
    
      315569260
      %2FwQAAAAAAAE2mZ%2F88WmZRrostaP.....wHUAI%3D
    
    mBxNcWdfrQMR9lcB
    1328732124
    48648000
  

где a – это токен сессии, а sessionSecret – секретный ключ, служащий для подписи GET запросов.

Токен и секретный ключ сессии сохраняются в базе клиента, и используются для получения cookies, что бы подключиться к BOS серверу по бинарному протоколу, а так же для открытия aim сессии, подписания (sig_sha256) запросов по HTTP.