1、google authenticator(谷歌身份验证器) 介绍

谷歌身份验证器,即Google Authenticator(Google身份验证器)v2.33 谷歌推出的一款动态口令工具,解决大家的google账户遭到恶意攻击的问题,在手机端生成动态口令后,在google相关的服务登陆中除了用正常用户名和密码外,需要输入一次动态口令才能验证成功。

2、google authenticator .Net 服务端

实现原理:
一、用户需要开启Google Authenticator服务时,
1.服务器随机生成一个类似于『MYZGCOJTMZTDKYRQ』的密钥,并且把这个密钥保存在数据库中。
2.在页面上显示一个二维码,内容是一个URI地址(otpauth://totp/账号?secret=密钥),如『otpauth://totp/Example@gmail.com?secret=MYZGCOJTMZTDKYRQ』,下图:

3.客户端扫描二维码,把密钥『MYZGCOJTMZTDKYRQ』保存在客户端。

二、用户需要登陆时
1.客户端每30秒使用密钥『MYZGCOJTMZTDKYRQ』和时间戳通过一种『算法』生成一个6位数字的一次性密码,如『955547』。如下图android版界面:

2.用户登陆时输入一次性密码『955547』。
3.服务器端使用保存在数据库中的密钥『MYZGCOJTMZTDKYRQ』和时间戳通过同一种『算法』生成一个6位数字的一次性密码。大家都懂控制变量法,如果算法相同、密钥相同,又是同一个时间(时间戳相同),那么客户端和服务器计算出的一次性密码是一样的。服务器验证时如果一样,就登录成功了。

重要代码类展示:

  public byte[] GenerateSetupCode(string issuer, string accountTitleNoSpaces, string accountSecretKey, bool secretIsBase32, int QRPixelsPerModule){byte[] key = secretIsBase32 ? Base32Encoding.ToBytes(accountSecretKey) : Encoding.UTF8.GetBytes(accountSecretKey);return GenerateSetupCode(issuer, accountTitleNoSpaces, key, QRPixelsPerModule);}
 public byte[] GenerateSetupCode(string issuer, string accountTitleNoSpaces, byte[] accountSecretKey, int QRPixelsPerModule){if (accountTitleNoSpaces == null) { throw new NullReferenceException("Account Title is null"); }accountTitleNoSpaces = RemoveWhitespace(accountTitleNoSpaces);string encodedSecretKey = Base32Encoding.ToString(accountSecretKey);string provisionUrl = null;if (String.IsNullOrWhiteSpace(issuer)){provisionUrl = String.Format("otpauth://totp/{0}?secret={1}", accountTitleNoSpaces, encodedSecretKey);}else{//  https://github.com/google/google-authenticator/wiki/Conflicting-Accounts// Added additional prefix to account otpauth://totp/Company:joe_example@gmail.com for backwards compatibilityprovisionUrl = String.Format("otpauth://totp/{2}:{0}?secret={1}&issuer={2}", accountTitleNoSpaces, encodedSecretKey, UrlEncode(issuer));}using (QRCodeGenerator qrGenerator = new QRCodeGenerator())using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(provisionUrl, QRCodeGenerator.ECCLevel.Q))using (QRCode qrCode = new QRCode(qrCodeData))using (Bitmap qrCodeImage = qrCode.GetGraphic(QRPixelsPerModule))using (MemoryStream ms = new MemoryStream()){qrCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);return ms.ToArray();}}

Demo完整下载:
https://download.csdn.net/download/weixin_40865248/11613878

3、google authenticator 手机客户端

手机端安装
1、Android移动设备

在您手机的应用市场搜索“Google身份验证器”或“Google Authenticator”,下载安装即可

2、iOS移动设备

进入应用市场,搜索“Google Authenticator”,下载安装即可。

3、其他平台:

Windows Phone:点击这里
WebOS:点击这里
Symbian或者其他支持Java ME的设备:点击这里

今天的分享到此为止,谢谢大家!

.Net Core使用google authenticator打造用户登录动态口令相关推荐

  1. 使用google authenticator(谷歌身份验证器)打造用户登录动态口令

    google authenticator php 服务端 使用php类 直接下载 https://github.com/PHPGangsta/GoogleAuthenticator/raw/maste ...

  2. Linux下使用Google Authenticator配置SSH登录动态验证码

    说明: 1.一般ssh登录服务器,只需要输入账号和密码. 2.本教程的目的:在账号和密码之间再增加一个 验证码,只有输入正确的验证码之后,再输入 密码才能登录.这样就增强了ssh登录的安全性. 3.账 ...

  3. 【Linux】使用Google Authenticator 实现ssh登录双因素认证

    一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...

  4. Linux 之 利用Google Authenticator实现用户双因素认证

    一.介绍:什么是双因素认证 双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产 ...

  5. 用户登录动态切换头像及切换名字

    登录前验证用户动态切换头像 效果图1 效果图2 效果图3 效果图4 登录页面由JS调用AJAX请求服务器 示例代码 <!--提交数据表单验证用户账号密码连接数据库--> <?php/ ...

  6. 使用google身份验证器实现动态口令验证

    最近有用户反应我们现有的短信+邮件验证,不安全及短信条数限制和邮件收验证码比较慢的问题,希望我们 也能做一个类似银行动态口令的验证方式.经过对可行性的分析及慎重考虑,可以实现一个这样的功能. 怎么实现 ...

  7. Java使用google身份验证器实现动态口令验证

    google身份认证器服务端key的生成和它生成的随机密码的验证: 客户端和服务器事先协商好一个密钥K,用于一次性密码的生成过程,此密钥不被任何第三方所知道.此外,客户端和服务器各有一个计数器C,并且 ...

  8. 使用google authenticator打造运维平台的动态口令

    原文地址http://rfyiamcool.blog.51cto.com/1030776/1416189 otp是什么知道么?是一次性密码,简单的说,totp是基于时间的,htop是基于次数的. Go ...

  9. google authenticator python_谷歌验证器(Google Authenticator)

    双因素身份认证就是经过你所知道再加上你所能拥有的这二个要素组合到一块儿才能发挥做用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一次性密码来代替传统的 ...

最新文章

  1. Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战
  2. 几个基于jvm 的微服务框架
  3. 面向对象的模型设计方法
  4. Linux 的文件权限与目录配置
  5. 查被占用的端口号由哪个程序运行
  6. jbutton 数组创建 java_java-将JButton数组添加到JPanel(按钮不可见)
  7. c语言正则表达式_CS143:编译原理|PA2:正则表达式和词法分析
  8. SAP License:FI常用表
  9. mysql 与c_mysql基础:mysql与C结合实例
  10. 动态ip解析 linux,ddwrt路由/linux动态解析ip(ddns)到dnspod配置
  11. 使用vue中遇到的一些问题以及解决方案
  12. FastReport 2021版中文手册PDF下载
  13. 【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers
  14. mupdf添加图片水印_在博客园里给图片加水印(canvas + drag)
  15. 电商小程序实战教程-总体介绍
  16. 在网址前加神秘字母,让你打开新世界
  17. 排列组合的写法_数学中,排列组合A C P分别代表什么?求详细。
  18. 行人重识别github开源库——HJL-re-id
  19. 我对技术的态度是什么样的?
  20. 对敏捷管理模式核心价值的解读

热门文章

  1. 合伙才能做大事 怎么合伙? 公司怎么分股合理?如何真正实现共赢?
  2. 半路出家,就是那种只看一些经文的和尚
  3. 李开复给中国大学生的第五封信——你有选择的权利
  4. HTML基础一:标题,段落,换行,强调,符号等
  5. InputStream类、OutputStream类、BufferedInputStream类与BufferedOutputStream类--Java基础084
  6. 如何做好苹果产品的清洁?清洁apple产品时需要注意什么?
  7. java double 精度范围_float 和 double 范围和精度
  8. 世故型性格的优缺点,世故型人格的职业发展方向
  9. element-ui的el-input组件实现只允许输入正整数(禁止以0开头,和输入e、+、-、.)
  10. 史上最全画册制作流程—画册印刷