# Авторизация через Telegram ID и номер телефона ## Описание Реализована схема авторизации, которая позволяет пользователям сайта войти через Telegram ID и номер телефона. Для этого используется общий секретный ключ между ботом и сайтом. Пользователь получает уникальную ссылку от бота с параметром `data`, в котором зашифрован Telegram ID и временная метка создания. При переходе по ссылке на сайт происходит проверка подлинности данных. Далее пользователь вводит номер телефона, после чего сайт связывает Telegram ID с номером и передает данные в сервис для дальнейшей работы. *** ## Как работает 1. **Генерация ссылки в боте** Бот формирует строку для кодирования: ``` string_to_encrypt_bytes = '{"telegram_id": "123456", "timestamp": "1756977183"}'.encode('utf-8') ``` Затем генерирует случайный nonce (вектор инициализации) размером 12 байт и шифрует эти данные с помощью алгоритма AES в режиме GCM с использованием ключа длиной 32 байта: ``` nonce = random_bytes(12) encrypted_data = AES_GCM_Encrypt(key, nonce, string_to_encrypt_bytes) result = nonce + encrypted_data output = base64_urlsafe_encode(result) ``` В итоговую ссылку вставляется этот параметр: ``` https://mascotte.ru/tg-auth/?data=[data] ``` 2. **Обработка запроса на сайте** - Извлекается параметр `data`; - Выделяет первые 12 байт как nonce; - Остальные байты как зашифрованный текст с тегом; - Сайт расшифровывает данные используя секретный ключ и проверяет: - что временная метка не старше 10 минут! - что данные корректно расшифровались! - Если проверка успешна — пользователь видит форму для ввода номера телефона. 3. **Авторизация пользователя** Пользователь вводит номер телефона и проходит обычную авторизацию на сайте. После успешной авторизации сайт формирует JSON объект: ```json { "telegram_id": "123456", "phone_number": "+79995556644" } ``` Этот объект отправляется в сервис (боту) для связывания данных. *** ## Важные моменты *** ## Формат JSON для связки данных ```json { "telegram_id": "123456", "phone_number": "+79995556644" } ``` *** ## Пример последовательности 1. Пользователь получает ссылку: ``` https://mascotte.ru/tg-auth/?data=abcdef123456... ``` 2. Переходит по ней, подтверждает время и номер телефона. 3. Сайт связывает телефон и Telegram ID, отправляет данные в сервис.