
Логин через Telegram по-новому: разбираем OIDC-флоу oauth.telegram.org и собираем его на Python
andy-takker 7 минут назад Логин через Telegram по-новому: разбираем OIDC-флоу oauth.telegram.org и собираем его на Python Средний 9 мин 77 Python * Веб-разработка * Информационная безопасность * Проектирование API *...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. andy-takker 7 минут назад Логин через Telegram по-новому: разбираем OIDC-флоу oauth. org и собираем его на Python Средний 9 мин 77 Python * Веб-разработка * Информационная безопасность * Проектирование API * Мессенджеры * Туториал Я пилил пет-проект — небольшой бэкенд на Litestar — и хотел прикрутить к нему логин через Telegram. Открыл первый попавшийся туториал на GitHub: HMAC от bot-token, /setdomain в BotFather, голые поля юзера в callback.
Почти всё, что я нашёл, было про старый виджет telegram. org/js/telegram-widget. Открыл доки Telegram — там написано: «новый flow, OpenID Connect, oauth.
Технические детали
В итоге собрал PoC — он умеет логинить пользователя через новый OIDC, держит cookie-сессию для HTML-страниц и отдаёт пару access + refresh токенов для JSON API. Эта статья — пересказ того, что мне самому хотелось бы прочитать в начале: где в потоке данных Telegram, где браузер, где наш бэк, и какие куски нужно реально писать руками. По ходу — туториал: настройка бота в BotFather, локальный тест через ngrok, запуск.
Код примеров — из репозитория Стек: Python 3. 13, Litestar, PyJWT, SQLAlchemy 2. Но сам OIDC-флоу со стеком не связан — те же шаги повторяются на FastAPI, Django или чём угодно ещё.
Старый виджет ≠ новый OIDCЕсли вы открывали старые туториалы про Telegram Login — забудьте их сразу, потоки разные. Старый виджет (telegram-widget. js):кнопка вставляется на любой возвращает поля юзера прямо в URL или в JS-callback;подлинность проверяется HMAC-SHA256 от токена бота;в BotFather вы прописываете домен через /setdomain.
Отраслевые последствия
Если в туториале видите что-то вроде hash = HMAC_SHA256(data_check_string, SHA256(bot_token)) и поля id, first_name, auth_date, hash — это и есть legacy-виджет, закрывайте. Новый OIDC-флоу (oauth. org):Telegram стал полноценным OpenID-провайдером;есть /.
well-known/openid-configuration, есть JWKS;ID-токен — настоящий JWT, подписанный публичным ключом из JWKS Telegram;бэкенд проверяет подпись по этому ключу, аудиторию (aud), издателя (iss), exp/iat;bot-token при авторизации не используется — он только для Bot API. Не путать его с Client Secret: BotFather в Web Login выдаёт пару Client ID + Client Secret, и Client Secret нужен для manual OIDC code flow. В popup-варианте бэк его не видит, но в полном flow он есть.
Польза от перехода — стандартный протокол, никакой ручной HMAC-проверки legacy-полей и совместимость с любой OIDC-библиотекой. Цена — другой набор настроек в BotFather и обязательный HTTPS на origin’е. Ещё один нюанс, на который я не сразу обратил внимание.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





