yeojz / otplib

:key: One Time Password (OTP) / 2FA for Node.js and Browser - Supports HOTP, TOTP and Google Authenticator
https://otplib.yeojz.dev
MIT License
1.95k stars 131 forks source link

TOTP check does not work on distributed systems #655

Open rosshettel opened 3 years ago

rosshettel commented 3 years ago

Describe the bug Testing OTP login locally with one server works correctly, but when deployed to AWS with multiple containers behind a load balancer, totp.check() takes multiple tries to pass. Upon investigation, it appears that only the original container that generated the OTP successfully passes the totp.check(). I'm storing the totp secret key in the database, so all servers have access to the same secret. They're also all synced to the same time.

Expected behavior totp.check() works with the same token and secret regardless of system

Details (please provide any relevant information):

rosshettel commented 3 years ago

Just a follow up on this, I switched to this library: https://www.npmjs.com/package/notp, since it is mostly a drop in replacement API wise, and no longer run into this issue. So not sure what's going on with this library that doesn't like multiple containers, but happy to provide any more info to help debug this