登录的双因素认证-Golang实现

需求

实现登录双因素认证

开源库使用

框架:github.com/gin-gonic/gin
验证码:github.com/dchest/captcha
session管理:github.com/gorilla/sessions + github.com/boj/redistore
OTP:github.com/xlzd/gotp + privacyidea
邮件发送:gopkg.in/gomail.v2

关键点

  • 验证码默认存储在内存中,怎么多实例共享?
    重写dchest/captcha的Store接口,使用redis存储验证码。
  • 用户验证完账号密码,如何记录用户的这一状态?
    用户验证通过后,生成临时session保存到redis中,默认5min,用户验证OTP的时候验证cookie中是否存在该session,存在则验证合法性(获取redis中存储的数据,存储了auth=pwd则视为通过了账号密码验证),之后再校验OTP。OTP Token在privacyidea中生成,也可自己随机生成,TOTP算法验证是否通过OTP验证。用户线下使用谷歌令牌或者身份宝等软件扫码即可。用户验证OTP通过后生成新的session,有效期一天。

你可能感兴趣的:(Golang)