登录二次验证(TOTP)/ 双因素登录 (TOTP)
作者: wenjianzhang创建于 2026年8月30日更新于 2026年8月30日
`Authenticator` 在 `common/middleware/handler/auth.go` 中绑定请求,检查验证码,比较密码,并返回声明。`jwtauth.LoginHandler` 然后从返回的内容中签署令牌。没有办法说"密码正确,但我们还没有完成" — 函数要么返回声明,要么返回错误,而错误是未授权的响应。因此,第一个设计问题不是 TOTP。它是如何使登录过程变成两步,而不改变每个现有客户端依赖的合约。我的读法是,`POST /api/v1/login` 继续为没有第二步的账户返回令牌,而对于具有第二步的账户,它返回一个短暂的挑战,`POST /api/v1/login/verify` 将其与代码交换为真正的令牌。这使`jwtauth` 独自处理 — 第一步不再通过`LoginHandler` 进行,第二步则调用它。挑战是一种凭据。短期有效期,一次性使用,与发出的账户绑定,且单独使用无价值。
内容来源: go-admin-team/go-admin