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格式的图片地址。