WishMeLz

生活其实很有趣

TOTP otpauth

import * as OTPAuth from "otpauth";
  let totp = new OTPAuth.TOTP({
      // Provider or service the account is associated with.
      issuer: "ACME",
      // Account identifier.
      label: "AzureDiamond",
      // Algorithm used for the HMAC function.
      algorithm: "SHA1",
      // Length of the generated tokens.
      digits: 6,
      // Interval of time for which a token is valid, in seconds.
      period: 30,
      // Arbitrary key encoded in Base32 or OTPAuth.Secret instance.
      secret: 'JBSWY3DPEHPK3PXP', // or 'OTPAuth.Secret.fromBase32("NB2W45DFOIZA")'
    });
   let code = totp.generate(); // 获取code
   let seconds = totp.period - (Math.floor(Date.now() / 1000) % totp.period); // 获取剩余秒数
  • secret:必需,OTP的密钥,可以是Base32编码的字符串或者HEX编码的字符串。
  • issuer:可选,发行人的名称,一般用于标识OTP的来源,如Google、Facebook等。
  • algorithm:可选,OTP的加密算法,可以是SHA1、SHA256、SHA512之一,默认为SHA1。
  • digits:可选,OTP的位数,可以是6或8,默认为6。
  • counter:可选,用于hotp类型的计数器。
  • period:可选,用于totp类型的时间周期,单位为秒,默认为30秒。
  • image:可选,与OTP相关联的图像,可以是任何URI格式的图片地址。