需求
實現登錄雙因素認證
開源庫使用
框架: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,有效期一天。