Авторизация OAuth 2.0 из 1С 8.2

Доступ к функциям Google API с помощью авторизации OAuth 2.0

Возникла необходимость связать 1С и Google Calendar.

По мотивам статьи: 

http://pro1c.net/tips/%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-oauth-20-%D0%B8%D0%B7-1%D0%A1-82/

Пример был переделан на управляемые формы и добавлена возможность использовать прокси-сервер.

Основное отличие авторизации по протоколу OAuth 2.0 от обычной состоит в том, чтобы исключить получение авторизационной информации(логин, пароль) приложением. Вместо этого пользователь , самостоятельно авторизовавшись, выдает приложению разрешение на доступ к запрошенным областям данных учетной записи.

21 Comments

  1. webester

    Спасибо, в закладки, пригодится, в приведенном вами источнике говорится что автор не смог заставить 1с работать через ssl и заюзал com объект, как у вас с этим?

    Reply
  2. queit

    Так же как, ssl не взлетает. Причины скрыты очень глубоко и раскопать мне их не удалось.

    Reply
  3. SiAl

    Спасибо.

    Одно пожелание (после ознакомления с процедурой

    ПолучитьЗначениеJSON

    ) — выучите регулярные выражения, очень упростится разбор текстов.

    Reply
  4. queit

    (3) SiAl, можно по подробнее. Пример можете привести?

    Reply
  5. SiAl

    (4) queit, пример чего? Использования регулярных выражений? Я просто раньше тоже использовал функции 1С для работы с текстами, и получались огромные портянки вместо процедур. RegExp очень упрощает кодинг при парсинге текстов.

    У меня вопрос еще по обработке.

    Какая последовательность действии правильна? Я копирую Client id и Client secret, а они через секунду очищаются, я даже не успеваю нажать кнопку Авторизация. Искал в коде, но нет нигде операции присваивания значений (даже пустых) эти полям.

    Reply
  6. queit

    (5) SiAl, Ок, тогда по другому: я не шарю в резулярных выражениях, можете переписать функцию «ПолучитьЗначениеJSON» с использование рег.выражений? Буду рад ознакомиться с реализацией.

    На счет того, что Client id и Client secret исчезают. В процедуре «ПриОткрытии» есть такая конструкция «ПодключитьОбработчикОжидания(«ОбработкаОповещенияИзменения»,2)» — применяется для прохождения 2-го этапа авторизации, вернее для получения кода доступа. Получается, что если за 2 секунды не набрал, то все. Можно время побольше поставить или как-то оптимизировать.

    Reply
  7. zyto

    Я правильно понимаю, что полученный маркер:

    Маркер = Ответ.Получить(«access_token»);

    Можно использовать для дальнейшей автоматической работы с гуглапи, и снова и снова его получать не нужно?

    Или у него есть некий «срок жизни» (а-ля кукисы, которые живут от нескольких секунд до нескольких дней), и через некоторое время надо снова получать этот маркер?

    Reply
  8. queit

    (7) zyto, тайм-аут есть. Если какое-то время ничего не делать, то нужно снова получать.

    Reply
  9. zyto

    А есть какой-нибудь другой способ авторизации, что бы пользователю не нужно было каждый раз жать кнопку «Разрешить», т.е. что бы можно было выполнять некий код по расписанию, без участия пользователя.

    Или это фантастика?

    Reply
  10. zyto

    По моим сугубо субъективным оценкам токен прожил около часа…

    Reply
  11. zyto

    В справке гугла есть упоминание про некую оффлайн авторизацию, и токен для обновления токена 🙂

    https://developers.google.com/identity/protocols/OAuth2WebServer#offline

    Кто-нибудь пробовал реализовывать такую авторизацию?

    Reply
  12. queit

    (9) zyto, как бы в этом и есть весь смысл двухступенчатой авторизации.

    Reply
  13. queit

    (11) zyto, такое пока не делал. Нет прикладной задачи пока 🙂

    Reply
  14. zolotukhin

    Возможно ли скачать эту обработку где-то еще?

    Reply
  15. queit

    (14) zolotukhin, могу на почту скинуть

    Reply
  16. zolotukhin

    (15) queit, очень бы выручили, огромное спасибо. vasilii.zolotukhin@gmail.com

    Reply
  17. dimasts

    Токен устарел и обработка стала бесполезной, даже поэкспериментировать не успел.

    Ребят, подскажите, как быстро допилить её, чтобы она обновила токен.

    Если не сложно 🙂

    пока не очень силен я в get-запросах

    Reply
  18. dimasts

    (17)Пересоздание проекта в консоли гугла и получение новых ключей не помогает.

    Reply
  19. dimasts

    (18)удаление куки и истории браузера не помогло

    Reply
  20. queit

    Полезность обработки сохраняется вне зависимости от токена.

    Токен вы сами должны получить в вашем гугл-профиле.

    Reply
  21. dimasts

    Дело не в этом. Токен устарел и его надо было обновить. Этого механизма в обработке не предусмотрено.

    Также очень много нагорожено с расшифровкой JSON-строк.

    Переписал всё сам заново, обработка заняла одну страницу.

    Непонятно зачем было столько городить, и не сделать самого необходимого.

    Как шаблон для собственных экспериментов тоже не подходит, очень много лишнего.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *