Делаем OAuth авторизацию Telegram на своём сайте

Удобный интерфейс, безопасность и внимательность к пользователям — это то, за что любят Telegram миллионы людей по всему миру. Сегодня мы разберемся как войти в телеграмм если вы случайно вышли из аккаунта используя смартфон на Android и IOS, а также браузерную и десктоп версию для компьютеров.

С телефона

Для начала рассмотрим инструкцию для людей, использующих мессенджер от Павла Дурова на смартфоне, так как на ПК их значительно меньше.

Android

  1. Итак, запустив приложение откроется стартовое окно с представлением преимуществ мессенджера через несколько слайдов. Если у вас нет приложения, его можно скачать из Play Market. Чуть ниже находятся пункты «Continue to English» (Продолжить на английском) и «Начать общение». Выбираем второй пункт.1-2-462x1000.jpg
  2. Указываем привязанный при регистрации номер в соответствующем поле и тапаем по стрелочке в левом нижнем углу экрана. При необходимо нажмите на строку «Russian Federation», и выберете свою страну проживания.2-2-462x1000.jpg
  3. Останется ввести полученные 5 цифр, и система автоматически войдет в аккаунт.

iPhone

  1. После открытия приложения каждый раз появляется небольшая презентация основных плюсов платформы и кнопка «Start Messaging», одна нас интересует небольшая надпись «Продолжить на русском» немного ниже.  Если у вас нет приложения, его можно скачать из App Store
  2. Затем введите номер телефона в соответствующую строку и тапните на «Далее». Будьте внимательны с выбором страны. Если вы проживаете не в Российской Федерации, то нажмите на название страны и выберете из появившегося списка свою.
  3. Далее на выбор появятся следующие варианты: Использование авторизованной версии на другом устройстве и СМС. Если используется desktop программа, то вы автоматически получите код из 5 цифр на устройство. Останется кликнуть на «Далее». В противном случае выбираем «Отправить код через SMS».
  4. В таком случае система перенаправит вас на другое окно, где необходимо ввести полученные на телефон цифры и нажать «Далее». Если по какой-то причине SMSне пришло, выберете соответствующий пункт меню и отправьте его заново.

С компьютера

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

Через браузер

  1. Перейдите по ссылке: https://web.telegram.org/#/login и введите в строку «Phone number» (см. скриншот ниже) указанный при регистрации номер. По окончанию заполнения кликните на «Next».
  2. Система попросит вас перепроверить указанные данные. После перепроверки кликаем на «Ок».
  3. Останется ввести полученный пароль и кликнуть на «Next».

Desktop версия

  1. Для начала воспользуйтесь ссылкой и скачайте программу: https://desktop.telegram.org/. После успешной установки на стартовом экране нажмите на «Начать общение».
  2. Далее необходимо указать номер телефона и выбрать «Продолжить». Здесь же имеется возможность использовать QR-код. Для его применения достаточно считать его через смартфон.
  3. Вводим полученный пароль и авторизуемся.

Как зайти в телеграмм без телефона

Разработчики изначально решили отказаться от стандартной схему логин/пароль и реализовали модель полной связки номера телефона и аккаунта мессенджера. Естественно, данный метод имеет свои плюсы и минусы. К однозначным минусам стоит отнести невозможность восстановления доступа к аккаунту без получения номера телефона при регистрации.

Однако специфический выход есть. Он заключается в использовании авторизованного версии для персонального компьютера. Главная задача – иметь авторизованный профиль при использовании данного устройства. После введения номера телефона, Telegram автоматически отправит код подтверждения на ПК.

Останется зайти в программу и ввести полученные цифры от бота социальной сети. Однако если у вас нет программы, или вы разлогинились в ней, тогда, к сожалению, единственный выход – обратиться в салон связи и попытаться восстановить потерянный номер.

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

Как зайти в заблокированный телеграм

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

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

Содержание стать

Можно ли восстановить аккаунт в телеграм: доступ к программе после удаления? Однозначно нет. Причиной является тот аспект, что мегабайт, который скачивается, стоит очень дорого, а простые загрузки установщика занимают целый день. Разработчики программы постарались добавить автовосстановление. Сейчас загрузить мессенджер может занимать от силы несколько минут, поэтому не нужно лениться и просто поставить его снова. А вот если удален старый аккаунт, то тут восстановить телеграм уже совсем иначе.

Многие пользователи интересуются вопросом можно ли восстановить учетную запись после его удаления? Ведь потерять свой аккаунт с прежними контактами для многих подписчиков настоящая трагедия: пропадают чаты, контактные данные, наборы наклеек. Конечно, пользователь желает возобновить все назад, обращаясь за технической помощью. Но, к несчастью, изменить ничего нельзя. Телеграмм советует в другой раз тщательно думать перед действиями, когда пользователь готов удалить свою учетную запись в приложении, чтобы не пришлось восстанавливать другой аккаунт телеграм. Очистить его произвольно невозможно, только нажав на удаление, аккаунт удаляется. Проведем анализ как восстановить телеграм.

Восстановление удаленного мессенджера на ПК и смартфоне

Если удалили мессенджер из своего устройства, самым простым способом является повторно установить другое приложение, то есть сделать перенос telegram на другой телефон.

Установку программы переноса telegram на другой телефон можно провести несколькими кликами:

  1. Зайти в магазин со смартфона с андроида.
  2. Найти через telegram.
  3. Установить на телефон.
  4. Запустить приложение.
  5. Чтобы другой аккаунт заработал, указать номер телефона, которые привязан к нему.
  6. Ввести код, полученный в смс.

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

  • Когда система будет скачиваться, щелкнуть по нему два раза.
  • Установить сервис на устройство.
  • По окончанию открыть его.
  • Ввести код номера профиля.

Важно! Нельзя выходить во время активации приложения, иначе заново придется проходить её.

Как восстановить свой аккаунт в телеграм? Если он был удален, то никаким образом восстановить невозможно. С профилем мгновенно исчезает все другие данные и удаленные сообщения. Если учетная запись присутствует в сети, но вы запамятовали свои личные данные или потеряли телефон, то можно легко восстановить аккаунт телеграм:

  1. Для этого необходимо привязать сим-карту.
  2. Скачать мессенджер.
  3. Ввести привязанный номер телефона.
  4. Дождаться, когда придет смс-сообщение с кодом.
  5. Ввести в отдельное поле.

Если вы потеряли и свой пароль – обратитесь в службу поддержки, которые засвидетельствуют ваши данные и переправят необходимую информацию в ваше сообщение. Можно возобновить без другой сим-карты, если в случае, когда номер был потерян. Все описанное выше требует наличие сим-карты, куда привязан ваш аккаунт. Случается, что в связи с потерей мобильного устройства теряется и давний номер. Что делать, если такая ситуация произошла? Есть два способа сделать перенос на другой телефон telegram:

  • Обратиться за поддержкой к оператору, который оформит для вас новую сим-карту, а старая будет блокирована, устройство восстановит.
  • Написать в поддержку оператору и объяснить все, если вы подтвердите свою личность и профиль будет восстановлен.

Восстановление учетного профиля можно провести несколькими вариантами:

  1. Повторно зарегистрироваться. Войти в свою учетную запись со своего устройства, которое используется сим-картой, к которому будет привязано приложение.
  2. Установить двухэтапную аутентификацию.
  3. Окончить весь активный сеанс системы.

Как перенести telegram на новое устройство

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

Телеграм для смартфона и планшета

Telegram можно поставить с сервиса из Play Market и App Store, если установили приложение с маркета, то никаких дополнительных других вопросов не возникнет. Чтобы поставить его, мессенджер должен открыть, задать вопрос и нажать на установку. Для айфонов сервис будет доступен по ссылке https://tlgrm.ru/dl/ios. Для смартфонов и планшетов на андройд можно закачать по ссылке https://tlgrm.ru/dl/android. Помимо официального клиента для пользователей Android доступен и другой альтернативный вариант https://tlgrm.ru/dl/android-plus.

Приложение для компьютера

На личный компьютер система ставится просто, можно скачивать на официальном сайте telegram. Достаточно будет разыскать ссылку https://tlgrm.ru/apps и избрать другую версию, которая бы соответствовала операционной системе. Можно использовать веб-версию https://web.tlgrm.ru или установить для браузера https://tlgrm.ru/dl/webogram. Обе другие версии подходят для ПК.

Важно! Имеются ограничения к переносу на другой телефон к доступу секретных чатов телеграм

Буквально позавчера Telegram выкатили нормальную OAuth авторизацию через мессенджер на сторонних ресурсах.

Раньше тоже можно было авторизовать пользователя через телеграм. Но для этого и пользователю и разработчику нужно было сделать много лишних телодвижений.

А теперь всё просто как в ВК или Facebook.

На нужен вебсайт. На localhost авторизацию проверить не получится, потому что к боту привязывается доменное имя.

Создать бота всё-таки придётся. Авторизовываться будут с помощью него. Разработчики Телеграм говорят, что бот сможет сам инициировать диалог с авторизованными таким способом пользователями. Я этого пока не проверял. Поверим на слово.

Подробно писать как создать бота я не буду, потому что про это написана и перенаписано миллион статей. Вот ссылка на мануал от Telegram https://core.telegram.org/bots#3-how-do-i-create-a-bot .

После создания бота нам дадут ключ api, который пригодится нам в дальнейшем.

Нужно отправить боту @BotFather команду /setdomain , он сначала попросит выбрать бота, а потом нужно будет ввести адрес сайта.

На странице https://core.telegram.org/widgets/login находим конфигурацию виджета

Вводим username бота, который сами придумали в процессе создания бота.

Далее выбирает размер кнопки. Три варианта. При перещёлкивании кнопка внизу будет автоматически менять размер.

Затем нужно выбрать как мы будем обрабатывать данные полученные от телеграм. Тут два варианта. Либо мы делает под это отдельную страницу и пользователя перенаправить туда, мы обработаем данные и можем перенаправить обратно или, например в закрытую часть сайта. Либо же мы делаем всё это через callback без перезагрузки страницы. Второй вариант мне кажется правильнее и современнее. Его и выбираю.

Далее там самая галочка, которая видимо и отвечает за отсылку сообщений от имени бота

Ну дальше поле с получившимся кодом.

Тут два тега скрипт. В принципе можно всё это вставить в нужное место на сайте, но я вставил только верхний, который рисует кнопку. Из нижнего я взял callback функцию и вставил в общий js-файл для сайта.

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

Как уже написал чуть выше, скрипт, отрисовывающий кнопку входа в телеграм, я вставил в нужное место в разметке. В файл, где у меня прописаны основные js функции, я добавил ту самую callback-функцию. У меня на сайте установлен jquery, поэтому не стал выделываться и отправил запрос через него.

function onTelegramAuth(user) {

$.ajax({

url: ‘/login’,

method: ‘post’,

data: user,

dataType:’json’,

success: function (data) {

location.reload()

},

error: function (error) {

alert(error)

}

})

}

Сайт работает на nodejs на фреймворке koa, поэтому пример буду приводить на нём(в конце дам ссылку на php)

Это контроллер login

//подключаем необходимые модули

const Router = require(‘koa-router’)

const router = new Router()

const jwt = require(‘jsonwebtoken’)

const config = require(‘../config/config’)

const mongo = require(‘../config/mongo’)

const crypto = require(‘crypto’);

const { strcmp } = require(‘../lib/utils’)

const ObjectID = require(‘../config/mongo’).ObjectID

// тут роут

exports.init = function (app) {

router.post(‘/login’, login)

app.use(router.routes())

}

// собственно функция логина

async function login(ctx,next) {

// сюда методом post приходят данные в виде json

const authData = ctx.request.fields

//с помощью hash мы проверим целостность данных, то есть вообще с телеграма ли нам это пришло или кто-то нехороший копается

const checkHash = authData.hash

delete authData[‘hash’]

/* по инструкции телеграм мы должны взять все данные, кроме hash, которые пришла нам от телеграм и собрать из в одну строку в формате key=value, разделяя символом переноса строки n */

let dataCheck = []

for (let key in authData) {

dataCheck.push(key + ‘=’ + authData[key])

}

dataCheck.sort();

dataCheck.join(“n”)

// Делаем из неё sha256

const secretKey = crypto.createHash(‘sha256’)

.update(config.oauth.telegram.botToken)

/* и проверяем если не ок, то шлём юзера куда подальше, если ок, то добавляем или обновляем пользователя в базе данных */

const hash = crypto.createHmac(‘sha256’, dataCheck.toString(), secretKey);

if (strcmp(hash, checkHash) === -1) {

ctx.status = 401

ctx.body = ‘Data is NOT from Telegram’

}

if ( +(new Date()) — authData.auth_date > 86400) {

ctx.status = 401

ctx.body = ‘Data is outdated’

}

const user = await mongo.users.findOne({id:authData.id})

if(!user){

await mongo.users.insertOne(authData)

}else{

await mongo.users.updateOne({_id: new ObjectID(user._id)},{$set:{authData}})

}

/*Здесь я использовал jwt, чтобы сделать токен, в принципе можно написать это самому, но суть статьи не в этом*/

const token = await jwt.sign(authData, config.app.secret)

/* Ставлю куку с этим токеном */

ctx.cookies.set(‘tgUser’, token);

ctx.status = 200

ctx.body = {

user: authData

}

/*Теперь я добавлю перед всеми роутами middlware. Я использую koa, там принять пользователя хранить в ctx.state.user*/

app.use(async (ctx,next) => {

const token = ctx.cookies.get(‘tgUser’)

if(token){

try {

ctx.state.user = await jwt.verify(token, config.app.secret)

}catch (error) {

ctx.cookies.set(‘tgUser’, ‘’);

}

}

await next(ctx)

})

После этого остаётся где нужно проверять переменную ctx.state.user.

Есть пример намного проще и на php от самих Телеграм. Вероятно, самые внимательные его уже нашли https://gist.github.com/anonymous/6516521b1fb3b464534fbc30ea3573c2

Этот пример чисто демонстративный, для реального сайта его нужно будет допилить.

__________

https://shogenov.com/

___________

Телграм канал — Я — программист!

Шутеечки в канале Дневнике программиста

Чат в телеге Клуб программистов

</p>

5cf4131a53d36.png

Авторизация через Telegram бота. Передача параметров пользователя из Telegram.

Al-Sher”>2019-06-06 19:19:12

Всем привет. Давно ничего не писал, так как не было никаких идей, но недавно, 31 мая 2019 года, Telegram выпустил новое обновление, в котором добавил новый тип данных – LoginUrl. Итак, попробую объяснить идею авторизации с помощью Telegram бота. Для начала, чтобы бот мог писать пользователю, пользователь должен отправить сообщение /start. Бот может как угодно ответить на это сообщение, например обычным приветствием или набором кнопок для взаимодействия с ботом. Именно кнопками мы и будем пользоваться для авторизации, но об этом чуть позже. Пользователь жмет на нашу кнопку, после чего перед ним появляется окошко с подтверждением действия. Если пользователь подтверждает свое действие, то он переходит на указанный в параметрах url с данными своего аккаунта, в том числе и уникальный id для пользователя.

Начнем. Для начала необходимо написать боту @BotFather для создания нашего бота. Ответив на несколько вопросов мы получим токен, с помощью которого можно управлять ботом. Далее нам необходимо добавить сайт для бота. Для этого пишем @BotFather сообщение /setdomain. Там нас спрашивают какому боту мы хотим указать url, выбираем нужного и указываем необходимый домен. Следующим шагом необходимо настроить получение сообщений ботом от пользователя. Этот шаг я описывать не буду, лишь скажу что Telegram поддерживает как ручную проверку обновлений (метод getUpdates), так и установку Webhook(метод setWebhook). Ну и конечно же нам необходимо отправлять сообщение пользователю с помощью метода sendMessage. Вот на нем я и остановлюсь подробнее. Данный метод принимает следующие параметры:

  • chat_id – в данном случае id пользователю, которому мы отправляем сообщение. Получаем от Telegram в методе getUpdates или с помощью Webhook.
  • text – текст сообщения. В данном случае он нам не нужен, так как мы будем использовать кнопку. Но если хотите объясниться перед пользователем, то это идеальный момент.
  • parse_mode – Указывает формат отправляемого сообщения. Поддерживаются Markdown и HTML.
  • disable_web_page_preview – Отключает превью для ссылки в данном сообщении.
  • disable_notification – Отправка сообщение без уведомления для юзера.
  • reply_to_message_id – Указывает на id сообщения, которое мы цитируем.
  • reply_markup – Добавляет кнопки.

Как можно было догадаться, нам необходимы chat_id и reply_markup. reply_markup принимает параметры в виде json массива с указанием типа кнопок и их параметров. Мы будем использовать inline_keyboard, так как они поддерживают LoginUrl. Ну давайте создадим простую кнопку:

$keyboard = Array(     'inline_keyboard' => [         [             ['text' => 'Нажми меня', 'login_url' => [                     'url' => 'https://web-wost.ru'                 ]             ]         ]     ] );

Не забываем перевести данную кнопку в json:

$keyboard_json = json_encode($keyboard);

Ну и отправляем:

file_get_contents('https://api.telegram.org/bot' . $token . '/sendMessage?chat_id=' . $id . 'reply_markup=' . $keyboard_json);

Не забываем так же создать переменные $token с токеном бота и $id с указанием id пользователя. Если всё сделано верно, то после выполнения данного php скрипта, бот отправит пользователю сообщение с кнопкой ‘Нажми меня’. После нажатия на кнопку, пользователя спросят разрешение об отправке данных и переходе по ссылке. Получаем данные от пользователя с помощью REQUEST:

$user_id = $_REQUEST['id']; $username = $_REQUEST['username']; $hash = $_REQUEST['hash'];

В принципе так мы получаем необходимые данные о пользователе, но их можно легко подменить. Для безопасности передачи данных Telegram отправляет нам hash. Для его проверки воспользуемся следующим кодом:

$data = $_REQUEST; $hash = $data['hash']; unset($data['hash']); $new_data = []; foreach($data as $key => $value)     $new_data[] = $key . '=' . $value; sort($new_data); $data_string = implode('n', $new_data); $secret_hash = hash('sha256', $token, true); $new_hash = hash_hmac('sha256', $data_string, $secret_hash); if(strcmp($hash, $new_hash) !== 0)      exit('Подмена данных!!!'); echo 'Привет ' . $data['username'];

Попробую разобрать данный код. Сначала мы записываем все полученные данные в переменную $data, далее сохраняем hash в специальную переменную($hash) и удаляем его из массива данных $data. Создаем новый пустой массив($new_data) для наших данных. Используя foreach, мы проходим через все полученные данные, записывая их в наш новый массив($new_data), сохраняя ключ=значение. Сортируем по алфавиту, превращаем в строку $data_string, записывая элементы через n. Хешируем наш токен($secret_hash), а дальше и все наши данные($new_hash). И последним шагом является проверка подлинности хэша.

Ну и осталось лишь осмотреть все параметры объекта LoginUrl:

  • url – указывает url, куда будет отправлен пользователь после нажатия на ссылку.
  • forward_text – текст кнопки в пересылаемых сообщениях.
  • bot_username – имя бота, через которого будет происходить авторизация.
  • request_write_access – запрос на возможность ботом писать пользователю сообщения.

На этом я заканчиваю, надеюсь эта запись будет полезна 🙂

В данном топике хочу описать дополнительный, а для некоторых сервисов возможно и основной способ авторизации и регистрации пользователя через Telegram, подобно OAuth авторизации через социальные сети и web-сервисы. Допустим, у Вас есть некий сервис, который предлагает пользователям вход через Telegram. На странице авторизации пользователю предлагается ввести его Username в Telegram. После ввода Username, на аккаунт пользователя приходит сообщение с кодом подтверждения, который он вводит на странице авторизации. В первую очередь нам потребуется «живой» аккаунт в Telegram, то есть аккаунт который зарегистрирован на мобильный номер телефона. В данном случае боты не подходят для данной задачи, так как боты не могут писать сообщения первыми. Теперь что касается серверной стороны. На странице приложений Telegram есть не официальное приложение telegram-cli. Оно и будет выполнять функцию приложения которое будет взаимодействовать с сервером Telegram. Для упрощения примера telegram-cli будем ставить в каталог /usr/local/src/:cd /usr/local/src/ Клонируем репозиторий:git clone --recursive https://github.com/vysheng/tg.git && cd tg Ставим необходимые пакеты:sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev python-dev Собираем telegram-cli:./configure make При первом запуске, приложение попросит ввести номер телефона нашего «живого» аккаунта. После ввода номера, будет выслан код подтверждения по смс или в приложение если данный аккаунт сейчас активен на другом устройстве. После подтверждения, в вашем домашнем каталоге будет создана директория “.telegram-cli” в которой будут хранится файлы конфигураций для указанного аккаунта. Запускаем: /usr/local/src/tg/bin/telegram-cli -k /usr/local/src/tg/tg-server.pub Видим следующую картину:3fe1eb800c8426be313ea4a6b407ce07.png Выходим из приложения:quit Запускаем приложение как демон например на порту 8089:/usr/local/src/tg/bin/telegram-cli --json -k /usr/local/src/tg/tg-server.pub -W -d -P 8089 & Теперь нам необходим скрипт который будет взаимодействовать с telegram-cli. По ключевым словам(telegram-cli php client) на GitHub было найдено готовое решение на PHP. Установка: git clone https://github.com/zyberspace/php-telegram-cli-client cd php-telegram-cli-client curl -sS https://getcomposer.org/installer | php php composer.phar install Создаем файл tg.php со следующим содержанием:

  require('vendor/autoload.php'); $telegram = new ZyberspaceTelegramCliClient('tcp://localhost:8089');  $USERNAME = '';  if($user = $telegram->exec("resolve_username {$USERNAME}")){  if($user->type == 'user'){  $code = mt_rand(10000, 99999); $message = "Hi {$user->first_name}! Your code: {$code}"; if($telegram->exec("msg user#{$user->id} {$message}")){ echo "Send message: Successrn"; } else { echo "Send message: Errorrn"; } }  } else { echo "User {$USERNAME} not found.rn"; } 

В переменную $USERNAME вписываем username пользователя которому будет отправлено сообщение с кодом подтверждения. Запускаем скрипт:php tg.php Если все прошло успешно, пользователю будет отправлено сообщение с кодом. На базе данного примера можно легко реализовать регистрацию/авторизацию пользователей через Telegram. Спасибо за внимание!Используемые источники:

  • https://telegramfag.ru/kak-vojti-v-telegramm
  • https://telegram-rus.ru/kak-vosstanovit-akkaunt
  • https://medium.com/@alexandershogenov/делаем-oauth-авторизацию-telegram-на-своём-сайте-74d0d63095b0
  • https://web-wost.ru/avtorizaciya-cherez-telegram-bota/
  • https://habr.com/ru/post/264301/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий