
Мобильный номер стал де-факто механизмом аутентификации пользователей в Индии, и, следовательно, генерация OTP является очень распространенным вариантом использования. otp-gen-agent — это небольшая служебная библиотека на основе Nano ID для создания OTP (одноразового пароля).
Зачем избегать Math.random()?
В документации для Math.random(); в примечании упоминается
Math.random() не предоставляет криптографически безопасные случайные числа. Не используйте их ни для чего, связанного с безопасностью. Вместо этого используйте Web Crypto API, а точнее метод window.crypto.getRandomValues().
Прочтите блог, реальный сценарий, Facebook JavaScript API; где злоумышленник смог воспользоваться уязвимостью.
Монтаж
npm install otp-gen-agent --save
Применение
Nano ID — это крошечный, безопасный, удобный для URL генератор уникальных строковых идентификаторов для JavaScript.
- Маленький: 130 байт (минимизированный и сжатый). Нет зависимостей. Ограничение размера управляет размером.
- Безопасность: используется аппаратный генератор случайных чисел. Можно использовать в кластерах.
Подробнее читайте в разделе Безопасность.
i) по умолчанию
const { otpGen } = require('otp-gen-agent');
const otp = await otpGen(); // '344156' (OTP length is 6 digit by default)
- Длина OTP по умолчанию – 6.
- Символы по умолчанию, используемые для создания одноразового пароля: 0123456789.
ii) собственный генератор одноразовых паролей
const { customOtpGen } = require('otp-gen-agent');
const otp = await customOtpGen({length: 4, chars: 'abc123'}); // 'a3c1'
аргументы:
- варианты: необязательно
length:настраиваемая длина otp
символы: настраиваемые символы.
Вы можете настроить длину OTP, а также символы, которые будут использоваться для генерации OTP.
iii) массовый генератор одноразовых паролей
const { bulkOtpGen } = require('otp-gen-agent');
const otp = await bulkOtpGen(2); // Array of otps: ['344156', '512398']
const { bulkOtpGen } = require('otp-gen-agent');
const otp = await bulkOtpGen(2, {length = 5, chars: 'abcd123'} ); // Array of otps: ['312b3', 'bcddd']
аргументы:
- число: количество одноразовых паролей, которые нужно сгенерировать массово.
- opts: необязательный аргумент
length: пользовательская длина otp (по умолчанию: 6)
chars: настраиваемые символы (по умолчанию: 0123456789)
Полезно в тех случаях, когда заранее известно количество генерируемых одноразовых паролей.
Заключение
Nano ID использует модуль шифрования в Node.js и Web Crypto API в браузерах. Эти модули используют непредсказуемый аппаратный генератор случайных чисел. otp-gen-agent — небольшая служебная библиотека на основе Nano ID для генерации otp.
Примечание. Эта статья изначально была опубликована в моем личном блоге Библиотека генератора одноразовых паролей (OTP) npm на основе nanoid.

Если вам понравился рассказ выше, вы можете купить мне кофе, чтобы зарядить меня энергией для написания подобных историй для вас и поддержать меня, потому что на момент написания этой истории я не подходит для участия в 'Партнерской программе среднего размера'.