zoukankan      html  css  js  c++  java
  • 浅谈双重认证逻辑

    前言

    关于两步认证, 之前一直没有具体的了解过,

    正文

    什么是双重认证

    两步认证是一个概念, 并不是指必须经过某种方式去实现, 而是指对于鉴权来讲, 在之前的通过账号密码的方式再加一层校验, 至于怎么加, 加的方式是什么并不是规定的, 当然, 目前国外比较通用的是使用 谷歌身份验证器/微软认证器 等来做, 国内的有使用短信的, 本文着重来说 谷歌身份验证器/微软认证器 等一些国外的认证流程, 因为他们都遵循了统一的标准(统一的算法)

    为什么需要双重认证

    传统的一步认证一般是账号密码, 因为账号密码是固定的, 所以如果密码泄露, 基本这个账户的一切都不再属于你, 而双重认证的原理决定了他是动态的, 是每一段时间变化一次的(一般30秒), 所以他相对来说比较安全, 如果你的密码暴露了但是二次认证生成的Code无法获取到照样无法进行操作, 所以双重认证的安全性更高

    双重认证流程

    一般的双重认证采用 TOTP 算法, 其算法保证了相同Key的情况下每一段时间内都可以生成同样的一个6位Code, TOTP算法资料可看 百度百科 wiki

    TOTP具体实现可看github

    atlassian 为例, 来我们开启走流程开启双重认证, 当我们选择开启时, 来到如下页面

    可以看到该网站提供了一个二维码给我们, 此时我们需要在手机上下载 谷歌身份验证器 app, 打开可以看到添加一个双重认证的方式有两种, 扫描二维码和手动输入, 我们来提取这个二维码的信息, 发现里面是一个链接, 类似于

    otpauth://totp/user@example.com?secret=PVKG6TZFHJUEMSK5ORYD3LI&issuer=Atlassian
    

    我们按照规则来解析, 实际上是

    otpauth://totp/认证项目名称?secret=唯一KEY&issuer=签发者
    

    需要注意的是, 我们每次重新申请开启双重认证时出现的二维码解析出的Key都是变化的

    当我们使用 谷歌身份验证器 扫描后, 会出现一条新的记录

    解释为

    你也可以按照此规则编出来一个链接通过生成二维码的小工具让软件扫扫看

    我们还原此过程, 当app扫到码之后, 获取到项目名称和Key与签发者, 按照TOTP算法生成6位Code, 展示出来, Code是30s一变, 但是注意, 此时网站与App并无联系, App也并不负责对Key等信息校验真实性

    而我们需要将生成的Code输入进网站的下方验证码这里, 通过后才会与App建立绑定关系(网站端单纯的建立逻辑的绑定关系)

    还原此过程, 网站端并不知道App有没有生成, 但是因为App都遵循统一的 TOTP 算法, 因此网站端也可以生成当时的正确Code, 当我们提交的Code与网站端生成的Code相符时, 即网站将该Key绑定(也就是图上说的 连接后,我们会记住您的手机,以便您每次登录时都可以使用。), 绑定后, 网站对这个通过的Key进行记录, 每次需要验证时网站根据Key生成Code, 与用户提交的Code比对, 通过即可

    通过上述流程, 我们可以发现, 实际上App端只掌握了一个Key, 但是App本身并不知道Key是否是正确的, 他们两个实际上永远没有交流, 这样就很安全

    经测试, 网站一般会只允许一个Key存活, 也就是当我们重新申请一个Key, 原先的Key则失效, 当然对于App是不知道的, 但是当我们提交认证时网站就会报错.

        作者:ChnMig

        出处:http://www.cnblogs.com/chnmig/

        本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!

        如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击左下角的 [推荐],谢谢!

  • 相关阅读:
    Ucloud的自主研发的检测主机是否被入侵的agent
    logstash 中多行合并
    python yield的解释
    influxdb 配置文件注释
    supervisor 完整安装步骤
    Linux创建系统用户
    kafka 集群的部署安装
    shell 计算时间差
    phantomjs 的安装部署
    yarn 的安装
  • 原文地址:https://www.cnblogs.com/chnmig/p/14333746.html
Copyright © 2011-2022 走看看