i am using otpNet to generate otpUri, then using QRCoder to generate Qr code, send it to front end and then display and scan it in Microsoft authenticator app . It scans successfully, but when i enter the otp i recieved in authenticator app, it does not verify and totp.VerifyTotp returns false
QR code generation
var secret = "DHHSILAOBIBEYLXUYZ4UHIJCT3N3HXDB";
var userName = "ABC";
var otpUri = new OtpUri(OtpType.Totp, secret, userName, "Test MFA").ToString();
// Generate QR code
using (var qrGenerator = new QRCodeGenerator())
using (var qrCodeData = qrGenerator.CreateQrCode(otpUri, QRCodeGenerator.ECCLevel.Q))
using (var qrCode = new QRCode(qrCodeData))
using (var qrCodeImage = qrCode.GetGraphic(20)) // Adjust size as needed
using (var ms = new MemoryStream())
{
qrCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
var qrCodeBase64 = Convert.ToBase64String(ms.ToArray());
// Return the Base64-encoded QR code image
return $"data:image/png;base64,{qrCodeBase64}";
}
TOTP Verification
var secret = "DHHSILAOBIBEYLXUYZ4UHIJCT3N3HXDB";
var secretBytes = Base32Encoding.ToBytes(secret ?? string.Empty);
var totpCode = This is the code that i got from my authenticator app;
var otpResult = totp.VerifyTotp(totpCode,
out var timeStepMatched,
VerificationWindow.RfcSpecifiedNetworkDelay);
if (!otpResult)
throw new Exception($"Provided TOTP code does not match.");