GoogleAuthenticator(或身份宝)
目前的客户端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
操作过程
绑定证书或密钥
- 服务器随机生成密钥,类似“DPI45HKISEXU6HG7” ,并把密钥和用户登录账号一起存入数据库
- 在页面上显示一个二维码,内容是一个URI地址,格式:otpauth://totp/账号?secret=密钥
- 使用客户端扫描二维码,把密钥保存在客户端
用户登录认证
- 客户端每30秒会使用密钥加(时间戳/30)通过一种算法,生成一个6位数字的一次性密码
- 用户登录的时候输入一次性密码
- 服务器端使用保存在数据库中的密钥“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(或身份宝)相关推荐
- Javaweb google身份宝验证
最近项目需要用到google身份宝做安全校验 所有看了看Google身份宝的使用 1.调用Google身份认证的数据 这里我用手机号做校验 import java.io.IOException; ...
- 使用opencv实现通过摄像头自动输入阿里云身份宝验证码
最近工作中开始使用opencv来做一些跟图像相关的机器学习项目,开始对图像处理产生浓厚的兴趣.搜索资料的时候偶然看到有一些使用opencv读取摄像头的小demo,在输入烦人的阿里云数加身份宝验证码的时 ...
- 印象笔记开启两步验证,绑定阿里身份宝
1.登录网页版-印象笔记,进入个人账户页面,找到基本设置,开启两步验证,可选择短信方式或者谷歌验证器. 2.由于考虑到谷歌验证器可能需要翻墙,这里可使用阿里身份宝(http://otp.aliyun. ...
- 使用Xamarin.Android中的Google登录OAuth 2.0对用户进行身份验证
什么是用户认证? (What is User Authentication?) There is a user base associated with every app that is avail ...
- 动态令牌之 OTP,HOTP,TOTP 的基本原理 Python
名词解释和基本介绍: OTP 是 One-Time Password的简写,标识一次性密码 HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性 ...
- 使用aerogear生成totp
序 本文主要讲述一下如何使用aerogear-otp生成otp,以及相关源码分析 otp分类 全称是one time password,通常用来支持双因素认证.主要可以分两类 HMAC-Based O ...
- 动态令牌-(OTP,HOTP,TOTP)-基本原理
动态令牌-(OTP,HOTP,TOTP)-基本原理 摘自https://www.cnblogs.com/voipman/p/6216328.html 名词解释和基本介绍 OTP 是 One-Time ...
- 【IoT】加密与安全:动态令牌 OTP、HOTP、TOTP 原理解析
1.OTP.HOTP.TOTP 简介 1.1.OTP One-Time Password 简写,表示一次性密码. 1.2.HOTP HMAC-based One-Time Password 简写,表示 ...
- 用Python建设企业认证和权限控制平台
目前大家对Python的了解更多来源是数据分析.AI.运维工具开发,在行业中使用Python进行web开发,同样也是非常受欢迎的,例如:FaceBook,豆瓣,知乎,饿了么等等,本文主要是介绍是利用P ...
最新文章
- 耐高温防腐计算机电缆,防腐耐高温计算机屏蔽控制电缆
- 怎么查计算机网络硬件配置,如何查看电脑本机的硬件配置?
- 编写一个函数,函数接收一个字符串,是由十六进制数组成的一组字符串,函数的功能是把接到的这组字符串转换成十进制数字.并将十进制数字返回
- CMS系统模版引擎设计(3):Label基类的设计
- [NOIP2016 提高组] 天天爱跑步(树上差分)
- 漫画:什么是二分查找?
- CentOS 6系统FreeSwitch和RTMP服务 安装及演示(一)
- 锁卡,每插入一张新卡都需要进行解锁
- 合唱队形java_动态规划之合唱队形问题
- 【小程序】常见系统API | 页面分享 | 位置信息 | 本地存储
- 如何用电话扩大Android内存,扩大内存 Android开启App2SD+教程
- MySQL 2019最全的国家地区代码、手机号正则验证,覆盖191个国家和地区
- 派大星python代码,简单python代码类型有哪些?
- Pipeline流水线-通过Jenkinsfile构建任务
- (转)安装SQL Server:以前某个程序安装时挂起了文件操作,安装程序前请重启
- 电脑桌面只有计算机回收站显示,电脑桌面上只有回收站怎么办 电脑只显示回收站的两种解决方法...
- 软件度量不是猫抓老鼠的游戏
- 微软认证考试六大考试技巧
- java里%是什么_java里.是什么意思?
- Grafana Labs线上交流问卷调查
热门文章
- Unity邮件功能Mail的使用
- 四年级下册计算机有错必改教案,有错必改教案.doc
- Xilinx 7系列FPGA收发器架构之接收器(RX)(十)
- 3.基于深度学习的轴承故障诊断--代码编写与运行
- 大批量数据修改时发现有一行数据被锁住了,一直处于等待状态的问题解决
- JS刷题第一天| 704. 二分查找、27. 移除元素
- 《音视频开发进阶指南》读书笔记(一) —— 音视频基础概念
- 实验室安全教育线上考试系统V3.0
- 学习时间|CMMI和SPCA的内容有哪些?
- STM32 PB3/PB4不能正常使用的解决办法 + 附实现代码