Используем telegram как второй фактор аутентификации

В последнее время все больше и больше сайтов стали заставлять пользователей использовать двухфакторную аутентификацию (2FA). В среднем, это весьма положительный тренд. Однако есть исключения, когда речь идёт о каком-то вообще не важном для тебя сайте, для которого не хочется заморачиваться с Google Authenticator, или Microsoft Authenticator. Для таких случаев я решил написать для себя telegram бот — https://t.me/TotpAuthenticatorBot.

На самом деле, в 2023 году существует великое множество разных клиентов, которые умеют генерировать TOTP (Time-based One-Time Passwords) коды для второго фактора. Даже менеджеры паролей (например, 1Password) научились это делать — оставим за скобками вопрос, на сколько безопастно хранить пароль и второй фактор в рамках одной программы. Однако мне захотелось иметь что-то совсем простое. В данном случае я выбрал 100% Usability, и близко к 0% Security. Для большинства случаев это непозволительный компромис, поэтому используйте данного бота только для совсем не важных для вас сайтов.

Код для генерации кодов я не стал писать сам, хотя есть прекрасное RFC 4226 с буквально готовым кодом реализации на Java. В самой генерации кода нет ничего хитрого, это бональный HMAC-SHA1, из которого потом строится привычные 8 цифр для TOTP кода. Все это уже реализовано в библиотеке https://github.com/hectorm/otpauth.

Код бота (крайне низкого качества) вы можете найти тут — https://github.com/Hixon10/TOTP-authenticator-telegram-bot/blob/main/src/index.js. Код написан на JavaScript, чтобы было максимально быстро и просто задеплоить это в бесплатные Cloudflare Workers, и не думать про администрирование какого-либо виртуального сервера.

Категории: Программирование