Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) (→Thesis) |
||
== Thesis == GNOME Online Accounts, или сокращённо GOA, предоставляет пользователям простой способ входа в онлайн-учётные записи различных сервисов (например Google, Yahoo, Nextcloud и т.\,д) в среде рабочего стола GNOME. В окне настройки учётных записей в Gnome видно, что отечественных сервисов [https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/issues/30 в списке не предусмотрено]. Но при этом тот же Yandex имеет функционал, который может быть использован в GOA. В российском сегменте подобных интеграций или доработок не обнаружено, поэтому было решено добавить поддержку новых сервисов. Для взаимодействия с сервисами Yandex было решено использовать Yandex Auth через [https://yandex.ru/dev/id/doc/ru/concepts/ya-oauth-intro OAuth токен]. Так как процесс получения токена у Yandex в определённом смысле [https://yandex.ru/dev/id/doc/ru/codes/code-url похож] на [https://developers.google.com/identity/protocols/oauth2/web-server?hl=en#httprest получение токена в Google], то за основу был взят [https://github.com/GNOME/gnome-online-accounts/blob/master/src/goabackend/goagoogleprovider.c исходный код goagoogleprovider.c], но с заменой путей url, характерных для Yandex. Идентификатор пользователя извлекается из default_email, возвращаемый при запросе страницы [https://login.yandex.ru/info]. Список доступа к приложениям Yandex сформирован таким образом: <pre> login:email login:info mail:imap_full mail:imap_ro mail:smtp calendar:all yadisk:disk cloud_api:disk.write cloud_api:disk.read </pre> При добавлении функционала он будет расширяться. В итоге доработок в списке GOA появился новый GOA-провайдер — Yandex. Иконка Yandex отображается в стандартной теме GNOME. При этом в списке GOA-провайдеров Yandex был вынесен на первое место при отображении. Так выглядит регистрация: Окно регистрации аккаунта: [[File:2023-berejok-img001.png|center]] Evolution имеет интеграцию с GOA, поэтому для первичной проверки был выбран именно он. После запуска он показал, что он не знает нового провайдера. Чтобы он мог с ним работать, был доработан пакет Evolution-data-server. В него добавлен новый провайдер — Yandex. Evolution способен извлекать из GOA токен и параметры учётной записи, и, используя функции провайдера, взаимодействовать с необходимыми сервисами. Интеграция с почтой оказалась самой простой. Её выполнили по аналогии с Google Mail, после чего она заработала без каких-либо сложностей и нареканий. Сложности возникли с календарём Yandex, так как у него есть свои особенности. Работа с ним отличается от работы с календарём Google: в протоколе отличий нет, но есть отличие в реализации аутентификации. Google-провайдер передаёт заголовок <pre> Authorization: Bearer <authorization-parameters> </pre> согласно [[https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization спецификации], в то время как Яндекс-сервер ожидает <tt>OAuth</tt> вместо <tt>Bearer</tt>. Небольшая замена в исходных кодах программного пакета позволила также подключить и календарь от Yandex сервисов. Для подключения Яндекс Диска в наличии имелись два варианта: [https://yandex.ru/dev/disk/rest/ Yandex REST API] и [[https://yandex.ru/dev/disk/webdav/ Yandex WebDAV API]. Основной пакет, который реализует подключение виртуальных файловых систем в Gnome — это gvfs. В данном пакете уже имеется инструментарий по работе с WebDAV протоколом (реализован для NextCloud). Поэтому в первую очередь заинтересовал именно WebDAV протокол от Yandex. Для определения типа авторизации используется [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization заголовок www-authenticate], который от Yandex сервера возвращает строку: <pre> WWW-Authenticate: Basic realm="Yandex.Disk" </pre> где аутентификация идентифицирует себя как Basic, но в качестве realm указывается Yandex.Disk. Эта маленькая деталь отделяла от работоспособности сервиса в gvfs пакете, т. к. Yandex требовал «OAuth», а не «Basic». После добавления такого нестандартного Basic, который возвращает в заголовке OAuth, функционал также заработал. Таким образом, малыми усилиями удалось интегрировать Яндекс сервисы с Gnome окружением. Для подключения Yandex сервисов, достаточно пройти одну авторизацию и получить в различных программах, поддерживающих Gnome Online Accounts работоспособные почту, календарь и диск. === Ссылки === * [https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/issues/30 Запрос на добавление Yandex сервисов в Gnome] {{----}} [[File:{{#setmainimage:Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023)!.jpg}}|center|640px]] {{LinksSection}} <!-- <blockquote>[©]</blockquote> --> <references/> [[Категория:OSSDEVCONF-2023]] [[Категория:Open-source projects]] [[Категория:Draft]] |
Версия 23:58, 10 января 2024
- Докладчик
- Алексей Бережок
GNOME Online Accounts, или сокращённо GOA, предоставляет пользователям простой способ входа в онлайн-учётные записи различных сервисов (например Google, Yahoo, Nextcloud и т. д) в среде рабочего стола GNOME.
В окне настройки учётных записей в Gnome видно, что отечественных сервисов в списке не предусмотрено. Но при этом тот же Yandex имеет функционал, который может быть использован в GOA.
В российском сегменте подобных интеграций или доработок не обнаружено, поэтому было решено добавить поддержку новых сервисов.
Содержание
Видео
Презентация
Thesis
GNOME Online Accounts, или сокращённо GOA, предоставляет пользователям простой способ входа в онлайн-учётные записи различных сервисов (например Google, Yahoo, Nextcloud и т.\,д) в среде рабочего стола GNOME.
В окне настройки учётных записей в Gnome видно, что отечественных сервисов в списке не предусмотрено. Но при этом тот же Yandex имеет функционал, который может быть использован в GOA. В российском сегменте подобных интеграций или доработок не обнаружено, поэтому было решено добавить поддержку новых сервисов.
Для взаимодействия с сервисами Yandex было решено использовать Yandex Auth через OAuth токен.
Так как процесс получения токена у Yandex в определённом смысле похож на [https://developers.google.com/identity/protocols/oauth2/web-server?hl=en#httprest получение токена в Google], то за основу был взят [https://github.com/GNOME/gnome-online-accounts/blob/master/src/goabackend/goagoogleprovider.c исходный код goagoogleprovider.c], но с заменой путей url, характерных для Yandex.
Идентификатор пользователя извлекается из default_email, возвращаемый при запросе страницы [1].
Список доступа к приложениям Yandex сформирован таким образом:
login:email login:info mail:imap_full mail:imap_ro mail:smtp calendar:all yadisk:disk cloud_api:disk.write cloud_api:disk.read
При добавлении функционала он будет расширяться.
В итоге доработок в списке GOA появился новый GOA-провайдер — Yandex. Иконка Yandex отображается в стандартной теме GNOME. При этом в списке GOA-провайдеров Yandex был вынесен на первое место при отображении.
Так выглядит регистрация:
Окно регистрации аккаунта:
Evolution имеет интеграцию с GOA, поэтому для первичной проверки был выбран именно он. После запуска он показал, что он не знает нового провайдера. Чтобы он мог с ним работать, был доработан пакет Evolution-data-server. В него добавлен новый провайдер — Yandex. Evolution способен извлекать из GOA токен и параметры учётной записи, и, используя функции провайдера, взаимодействовать с необходимыми сервисами.
Интеграция с почтой оказалась самой простой. Её выполнили по аналогии с Google Mail, после чего она заработала без каких-либо сложностей и нареканий.
Сложности возникли с календарём Yandex, так как у него есть свои особенности. Работа с ним отличается от работы с календарём Google: в протоколе отличий нет, но есть отличие в реализации аутентификации. Google-провайдер передаёт заголовок
Authorization: Bearer <authorization-parameters>
согласно [спецификации, в то время как Яндекс-сервер ожидает OAuth вместо Bearer. Небольшая замена в исходных кодах программного пакета позволила также подключить и календарь от Yandex сервисов.
Для подключения Яндекс Диска в наличии имелись два варианта: Yandex REST API и [[https://yandex.ru/dev/disk/webdav/ Yandex WebDAV API]. Основной пакет, который реализует подключение виртуальных файловых систем в Gnome — это gvfs. В данном пакете уже имеется инструментарий по работе с WebDAV протоколом (реализован для NextCloud). Поэтому в первую очередь заинтересовал именно WebDAV протокол от Yandex. Для определения типа авторизации используется [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization заголовок www-authenticate], который от Yandex сервера возвращает строку:
WWW-Authenticate: Basic realm="Yandex.Disk"
где аутентификация идентифицирует себя как Basic, но в качестве realm указывается Yandex.Disk. Эта маленькая деталь отделяла от работоспособности сервиса в gvfs пакете, т. к. Yandex требовал «OAuth», а не «Basic». После добавления такого нестандартного Basic, который возвращает в заголовке OAuth, функционал также заработал.
Таким образом, малыми усилиями удалось интегрировать Яндекс сервисы с Gnome окружением. Для подключения Yandex сервисов, достаточно пройти одну авторизацию и получить в различных программах, поддерживающих Gnome Online Accounts работоспособные почту, календарь и диск.