Как обойти ограничение OAuth в Bitrix24, или как авторизоваться автоматически?

Доброго утра.
Есть внешнее приложение, которое имеет доступ к REST API, соответственно, проходит авторизацию через OAuth. Но есть проблема: access_token живет всего один час, а refresh_token - один месяц (или до первого использования). Мне же нужно сделать так, чтобы приложение по логину и паролю пользователя на Битрикс24 само, по крону, логинилось там, получало токены при его истечении, и если оба токена уже не актуальны, снова логинилось и снова их получало. Фактически, нужно сделать авторизацию полностью автоматической.

Для получения доступа к OAuth нужно, прежде всего, войти на сервис через логин и пароль. Как это сделать дистанционно, в документации не сказано (или я не нашел, ибо у 1с традиционно черт ногу сломит).

Есть идеи, как реализовать вышеописанное? Периодически проверять, не отвалилась ли авторизация и тыкать по кнопочке, как сейчас - плохой вариант. Заставлять крон использовать refresh_token хотя бы раз в пару недель, чтобы он не сгорал, можно, но это не самый надежный метод - вдруг он, по каким-то причинам (например, сервер ляжет), не обновится? Придется вручную авторизовываться снова.

Заранее спасибо.
  • Вопрос задан
  • 1300 просмотров
Пригласить эксперта
Ответы на вопрос 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Я далек от битрикса - а в чем проблема проходить авторизацию заново каждый раз?
Если Вы знаете логин и пароль пользователя - в своем скрипте всегда можно воспроизвести ту же последовательность запросов что вы делаете для получения этого токена.
Ответ написан
@xldib
$post = http_build_query([
'AUTH_FORM' => 'Y',
'TYPE' => 'AUTH',
'backurl' =>'/auth/',
'USER_LOGIN' => $login,
'USER_PASSWORD' => $pass,
'USER_REMEMBER' => 'Y'
]);

if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
curl_setopt($ch, CURLOPT_URL, 'https://'.SITE_PORTAL.'/auth/?login=yes');
// cURL будет выводить подробные сообщения о всех производимых действиях
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//сохранять полученные COOKIE в файл
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/restapi/cookie.txt');
$result=curl_exec($ch);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы