网站首页 > 开源技术 正文
目前很多网站、服务都已经启用了双因素认证。双因素认证又称之为两步认证。就是在你输入自己的用户名、密码之后,还需要在额外的输入一个认证码。这个认证码是动态变化的,只有你自己能够获取,别人是无从知晓的。这样,即使你的密码泄露了,别人也没办法登录。
和使用短信验证码相比,它的好处是不需要发送短信,节省了费用。
比较常用的双因素认证是TOTP(Time-based One-time Password),即基于时间的一次性密码。
通过以下步骤实现:
- 用户启用两步认证之后,服务器生成一个密钥
- 服务器提示用户扫描二维码(用户手机上事先安装好相应的APP,通常使用google authenticator),通过扫码的方式将密钥保存到用户的手机。这样用户和服务器都拥有了同一个秘钥
- 用户在登录时,查看手机APP,APP会根据秘钥和当前的时间生成一个认证码(通常是一个6位数的数字),默认有效期是30秒。在有效期内,将这个认证码提交给服务器端
- 服务器同样根据秘钥和当前时间戳生成一个认证码,然后和用户提交的认证码比对。如果不一致,则拒绝登录
秘钥生成原理(基于时间)
1、时间戳,精确到微秒,除以1000,除以30(动态6位数字每30秒变化一次)
2、对时间戳余数 hmac_sha1 编码
3、然后 base32 encode 标准编码
4、输出大写字符串,即秘钥
动态6位数字验证:
Google Authenticator会基于密钥和时间计算一个HMAC-SHA1的hash值,这个hash是160 bit的,然后将这个hash值随机取连续的4个字节生成32位整数,最后将整数取31位,再取模得到一个的整数。
这个就是Google Authenticator显示的数字。
在服务器端验证的时候,同样的方法来计算出数字,然后比较计算出来的结果和用户输入的是否一致。
后继会给出一个golang的实现。
本文参考:
https://my.oschina.net/qiongtaoli/blog/3049118
https://segmentfault.com/a/1190000021582726
- 上一篇: 如何设计一个安全的对外接口
- 下一篇: 贡献!程序员大学四年珍藏的26个宝藏网站,全部拿出来了
猜你喜欢
- 2024-12-05 贡献!程序员大学四年珍藏的26个宝藏网站,全部拿出来了
- 2024-12-05 如何设计一个安全的对外接口
- 2024-12-05 谷歌弃用MapReduce!力推新云分析工具
- 2024-08-01 线上服务 CPU 100%?一键定位 so easy
- 2024-08-01 测试人的福音:超实用的自动化测试平台推荐
- 2024-08-01 微服务配置中心选型比较——Nacos、Apollo、Config
- 2024-08-01 强!推荐一款贼好用的低代码报表、大屏设计工具,开源免费!
- 2024-08-01 程序汪1万接的企业官网项目,开发周期15天
- 2024-08-01 你发现没?www和https://又被Chrome地址栏隐藏了
- 2024-08-01 赶紧收藏!程序员必备的工具网站,用好了节省你大把的编程时间
你 发表评论:
欢迎- 05-16东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 05-16这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 05-16湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- 05-16Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- 05-16G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- 05-16DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 05-16上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- 05-16WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 最近发表
-
- 东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 湖人自媒体调查:89%球迷希望DFS回归 79%希望詹姆斯回归
- 一觉醒来湖人苦盼的纯3D终于到位 DFS能带给紫金军多少帮助
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)