Кейс авторизации пользователя в Telegram через веб-сайт для анализа личных данных

Автор: Евгения Гросс

Задача: авторизация пользователя в Telegram через веб-сайт для анализа личных данных (подписки на каналы, истории и другие аспекты).

Преимущества такой схемы авторизации заключаются в следующем: при создании сервисов на основе Telegram API обычно используется личный аккаунт компании или разработчика для получения информации. Это ограничивает доступ к данным пользователей и может создать проблемы с лимитом запросов к API. В результате, это негативно сказывается на работе всего сервиса и требует сложных архитектурных решений.

Когда пользователь авторизуется через свой аккаунт в Telegram, запросы распределяются равномерно между всеми активными пользователями. Даже если один из пользователей превышает лимит запросов, Telegram API применяет таймаут только к этому аккаунту, что не влияет на работу всего сервиса. Кроме того, это позволяет строить сервис, ориентированный на данные конкретного пользователя, поскольку он обращается к Telegram API самостоятельно. Это обеспечивает более полное получение и анализ информации, а также позволяет пользователю осуществлять действия в Telegram от своего имени.

Реализация:

Для иллюстрации процесса авторизации пользователя в Telegram используются следующие этапы, выполненные с применением стека FastAPI, MongoDB и библиотеки Telethon.

  1. При нажатии кнопки «Войти с помощью Telegram» пользователю отображается форма для ввода номера телефона.
    Пример формы для ввода номера телефона:
  2. После ввода номера телефона и нажатия кнопки «Отправить» отправляется запрос на получение кода авторизации через Telegram API. В результате выполнения функции возвращается строка сессии пользователя и хэш номера телефона, которые сохраняются в базе данных для последующих запросов. Затем пользователю предоставляется форма для ввода кода авторизации.
    Пример формы ввода кода авторизации:
  3. После ввода кода и нажатия кнопки «Отправить» происходит запрос на вход в Telegram. Если у пользователя не настроена двухфакторная аутентификация, при успешном выполнении запроса производится сохранение новой строки сессии и идентификатора пользователя в Telegram. От этого момента пользователь может выполнять запросы к Telegram API от своего имени, подставляя строку сессии в каждый запрос. В случае наличия двухфакторной аутентификации пользователю предоставляется форма для ввода пароля. После ввода пароля и нажатия кнопки «Отправить», при успешном запросе также сохраняются строка сессии и идентификатор пользователя, что обеспечивает возможность выполнения всех запросов, связанных с Telegram, от имени этого пользователя.
    Пример формы для ввода пароля:

Важно: на каждом этапе авторизации следует сохранять строку сессии.

Варианты реализации:

  • Вариант 1: Получение кода авторизации → Сохранение строки сессии → Отправка запроса на авторизацию по коду → Сохранение строки сессии.
  • Вариант 2: Получение кода авторизации → Сохранение строки сессии → Отправка запроса на авторизацию по коду → Сохранение строки сессии → Отправка запроса на авторизацию по паролю → Сохранение строки сессии.