目前的客户端App:

  • Google Authenticator

    • 安卓:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2
    • iOS:https://itunes.apple.com/cn/app/google-authenticator/id388497605
  • 阿里的《身份宝》 (兼容Google 身份验证器)
    • 身份宝 :http://otp.aliyun.com/shenfenbao.html

操作过程

绑定证书或密钥

  1. 服务器随机生成密钥,类似“DPI45HKISEXU6HG7” ,并把密钥和用户登录账号一起存入数据库
  2. 在页面上显示一个二维码,内容是一个URI地址,格式:otpauth://totp/账号?secret=密钥
  3. 使用客户端扫描二维码,把密钥保存在客户端

用户登录认证

  1. 客户端每30秒会使用密钥加(时间戳/30)通过一种算法,生成一个6位数字的一次性密码
  2. 用户登录的时候输入一次性密码
  3. 服务器端使用保存在数据库中的密钥“DPI45HKISEXU6HG7”和(时间戳/30)通过同一种算法生成一个6位数字的一次性密码,如果6位数字密码和用户输入的相等,那么服务器验证通过。

测试代码

  • maven依赖
<dependency><groupId>com.warrenstrange</groupId><artifactId>googleauth</artifactId><version>1.2.0</version>
</dependency>
  • 随机生成密钥字符串
public static String createSecretKey(){SecureRandom random = new SecureRandom();byte[] bytes = new byte[20];random.nextBytes(bytes);Base32 base32 = new Base32();String secretKey = base32.encodeToString(bytes);return secretKey.toUpperCase();
}
  • 拼接二维码URI
public static String createGoogleAuthQR(String secret,String account,String issuer){String qrCode = "otpauth://totp/%s?secret=%s&issuer=%s";try {return String.format(qrCode, URLEncoder.encode(issuer+":"+account,"UTF-8").replace("+", "%20"),URLEncoder.encode(secret,"UTF-8").replace("+", "%20"),URLEncoder.encode(issuer, "UTF-8").replace("+", "%20"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}return "";
}
  • 使用依赖包解析密钥串获取数字验证码
public static Integer getTOTP(String secretKey){GoogleAuthenticator googleAuthenticator = new GoogleAuthenticator();int pass = googleAuthenticator.getTotpPassword(secretKey);return pass;
}

GoogleAuthenticator(或身份宝)相关推荐

  1. Javaweb google身份宝验证

    最近项目需要用到google身份宝做安全校验  所有看了看Google身份宝的使用 1.调用Google身份认证的数据  这里我用手机号做校验 import java.io.IOException; ...

  2. 使用opencv实现通过摄像头自动输入阿里云身份宝验证码

    最近工作中开始使用opencv来做一些跟图像相关的机器学习项目,开始对图像处理产生浓厚的兴趣.搜索资料的时候偶然看到有一些使用opencv读取摄像头的小demo,在输入烦人的阿里云数加身份宝验证码的时 ...

  3. 印象笔记开启两步验证,绑定阿里身份宝

    1.登录网页版-印象笔记,进入个人账户页面,找到基本设置,开启两步验证,可选择短信方式或者谷歌验证器. 2.由于考虑到谷歌验证器可能需要翻墙,这里可使用阿里身份宝(http://otp.aliyun. ...

  4. 使用Xamarin.Android中的Google登录OAuth 2.0对用户进行身份验证

    什么是用户认证? (What is User Authentication?) There is a user base associated with every app that is avail ...

  5. 动态令牌之 OTP,HOTP,TOTP 的基本原理 Python

    名词解释和基本介绍: OTP 是 One-Time Password的简写,标识一次性密码 HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性 ...

  6. 使用aerogear生成totp

    序 本文主要讲述一下如何使用aerogear-otp生成otp,以及相关源码分析 otp分类 全称是one time password,通常用来支持双因素认证.主要可以分两类 HMAC-Based O ...

  7. 动态令牌-(OTP,HOTP,TOTP)-基本原理

    动态令牌-(OTP,HOTP,TOTP)-基本原理 摘自https://www.cnblogs.com/voipman/p/6216328.html 名词解释和基本介绍 OTP 是 One-Time ...

  8. 【IoT】加密与安全:动态令牌 OTP、HOTP、TOTP 原理解析

    1.OTP.HOTP.TOTP 简介 1.1.OTP One-Time Password 简写,表示一次性密码. 1.2.HOTP HMAC-based One-Time Password 简写,表示 ...

  9. 用Python建设企业认证和权限控制平台

    目前大家对Python的了解更多来源是数据分析.AI.运维工具开发,在行业中使用Python进行web开发,同样也是非常受欢迎的,例如:FaceBook,豆瓣,知乎,饿了么等等,本文主要是介绍是利用P ...

最新文章

  1. 耐高温防腐计算机电缆,防腐耐高温计算机屏蔽控制电缆
  2. 怎么查计算机网络硬件配置,如何查看电脑本机的硬件配置?
  3. 编写一个函数,函数接收一个字符串,是由十六进制数组成的一组字符串,函数的功能是把接到的这组字符串转换成十进制数字.并将十进制数字返回
  4. CMS系统模版引擎设计(3):Label基类的设计
  5. [NOIP2016 提高组] 天天爱跑步(树上差分)
  6. 漫画:什么是二分查找?
  7. CentOS 6系统FreeSwitch和RTMP服务 安装及演示(一)
  8. 锁卡,每插入一张新卡都需要进行解锁
  9. 合唱队形java_动态规划之合唱队形问题
  10. 【小程序】常见系统API | 页面分享 | 位置信息 | 本地存储
  11. 如何用电话扩大Android内存,扩大内存 Android开启App2SD+教程
  12. MySQL 2019最全的国家地区代码、手机号正则验证,覆盖191个国家和地区
  13. 派大星python代码,简单python代码类型有哪些?
  14. Pipeline流水线-通过Jenkinsfile构建任务
  15. (转)安装SQL Server:以前某个程序安装时挂起了文件操作,安装程序前请重启
  16. 电脑桌面只有计算机回收站显示,电脑桌面上只有回收站怎么办 电脑只显示回收站的两种解决方法...
  17. 软件度量不是猫抓老鼠的游戏
  18. 微软认证考试六大考试技巧
  19. java里%是什么_java里.是什么意思?
  20. Grafana Labs线上交流问卷调查

热门文章

  1. Unity邮件功能Mail的使用
  2. 四年级下册计算机有错必改教案,有错必改教案.doc
  3. Xilinx 7系列FPGA收发器架构之接收器(RX)(十)
  4. 3.基于深度学习的轴承故障诊断--代码编写与运行
  5. 大批量数据修改时发现有一行数据被锁住了,一直处于等待状态的问题解决
  6. JS刷题第一天| 704. 二分查找、27. 移除元素
  7. 《音视频开发进阶指南》读书笔记(一) —— 音视频基础概念
  8. 实验室安全教育线上考试系统V3.0
  9. 学习时间|CMMI和SPCA的内容有哪些?
  10. STM32 PB3/PB4不能正常使用的解决办法 + 附实现代码