时序口令演示
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/hxt20261886。
技能介绍
解决什么问题
在接入 TOTP 两步验证时,团队往往先纠结于「这个 6 位码到底怎么算出来的」。翻 otplib 文档能知道有 authenticator.generate 和 authenticator.check 两个入口,但把密钥输入、时钟步长、校验返回值串成一条可跑的最小链路,仍然要花时间试错。更常见的坑是:演示用的 Secret 被硬编码进了仓库,日志里明文打印了 seed,或者校验失败直接抛异常把主流程打断。
这个技能针对的就是本地试算与自测场景:不搭建账号体系,不写服务端,只回答「当前这一秒的码是什么」「用户输入的这 6 位对不对」。
它如何工作
核心能力只有两步,直接复用 otplib 的公开 API:
- 生成:调用
authenticator.generate(secret)得到当前 6 位码,用于在 Demo 界面上实时展示; - 校验:调用
authenticator.check(input, secret)返回布尔值或错误信息,供表单做本地比对。
推荐的演示闭环是:
- 运行时由输入框提供
newSecret,绝不落盘、不进 git; - 展示当前窗口的
genTotp结果,方便观察码随时间变化; - 用户在输入框提交后走
verifyTotp,通过则放行,失败返回明确的失败信息; - 自测三例:正确码通过、改一位失败、空密钥给出报错而非崩溃。
时钟偏差通过 window 参数控制,即允许前后若干个时间步的容忍度,默认取较小的合理值,避免把安全裕度开得过大。
适用边界与注意点
- 只做本地 Demo:本包不包含完整账号体系,不提供密钥托管、多用户存储或服务端校验接口,不要拿它直接当生产认证方案。
- Secret 只在内存:演示密钥由运行时输入提供,禁止写死进仓库,也不要在前端长期明文展示给无关人员。
- 失败要优雅:校验不通过时返回布尔值或错误信息,不要抛未捕获异常挡住主流程。
- 实现要点:原创部分(密钥注入与校验调用的组合方式)在代码注释中以
小四原创标出,灵感来自otp-totp能力工具箱。 - 依赖边界:仅依赖
otplib或其文档推荐的兼容导入方式,不引入额外的加密栈。
使用场景
- 编写登录表单时,需要在本地用 otplib 实时展示当前 6 位动态码并验证用户输入是否正确
- 开发两步验证功能期间,想快速试算某个 Secret 在不同时间窗口内生成的 TOTP 码
- 学习 TOTP 原理时,需要一个最小可运行的生成与校验示例来理解密钥和时钟步长的作用
- 自测认证逻辑时,要验证时钟偏差参数 window 对校验结果的影响并确保失败时返回布尔值
适合人员
- 正在为 Web 应用接入两步验证的后端工程师,需要一个最小 TOTP 生成与校验示例来参考调用方式
- 编写认证功能教程的技术作者,需要一个不涉及完整账号体系的本地试算 Demo 来演示 otplib 基本用法
- 学习时间型一次性密码原理的开发者,想通过可运行的生成与校验代码理解 Secret 和时间步长的关系
- 负责安全相关模块并对密钥管理有要求的开发者,需要在本地验证 TOTP 逻辑时确保 Secret 不进入 git 或日志