安全 类似于 Google 二次验证的服务是如何做的?

lufeihaidao · 2014年07月07日 · 最后由 lufeihaidao 回复于 2014年07月08日 · 4156 次阅读

逻辑:

当登录的时候,判断该设备是否曾经登录过。如果是,允许登录;否则,需要通过手机验证之后才能登录

主要分为两块:

  1. 设备唯一性的识别:手机有设备 ID,比较方便,PC 一般是怎样标识唯一性的?UA IP 都不靠谱,普通的 cookie 受限于浏览器。stackoverflow 上说到 Google 使用 flash cookie 结合 local shared object。有人这样做过吗?

  2. 手机验证,国内有没有比较安全的提供手机验证的工具和平台?(相对于 Google 的 APP 二次验证,手机验证码验证可以少安装一个 APP)

我注意到,用 steam 登录的时候,如果从未使用该 PC 登录过,会要求你邮箱验证。但当我在网吧登录过一次之后,再次去这家网吧就可以直接 steam 登录了,它是如何识别我的?

----------------------------------------------------------更新分割线---------------------------------------------------------------

代码基本完成了。已有问题是这样解决的:

  1. 用 cookie。移动端则是设备 ID 号
  2. 暂时不用手机 APP 验证,而采用短信验证

相关的设计见我的博文:短信验证的设计

这个 Gem 建议你研究一下:https://github.com/mdp/rotp

我注意到,用 steam 登录的时候,如果从未使用该 PC 登录过,会要求你邮箱验证。但当我在网吧登录过一次之后,再次去这家网吧就可以直接 steam 登录了,它是如何识别我的?

细思恐极,网吧的系统应该都是无盘的吧……怎么识别的你?难道还是说 Steam 是判断你的登录地区,该地区的第一次登录需要验证,然后后面的就不需要了?然后如果超过一定时间,比如三个月没有登录,又重新需要验证?

#1 楼 @lgn21st 浏览了一下似乎有点复杂,我研究一下。 #2 楼 @chunlea 我猜是因为网吧的对外 IP 是固定的原因

#3 楼 @lufeihaidao 其实只有两个参数 一个自动生成的随机 Token 和当前时间。。

#4 楼 @iBachue 呃这个是什么?唯一 ID 还是 steam 的验证方法?

这个唯一的 ID 肯定是可以后台生成交给浏览器的,但是谁来存储它呢?cookie 受限于浏览器,换了浏览器就不认识了

#5 楼 @lufeihaidao 我说的是 Google 二次验证啦 Steam 那个 我猜根本没这么复杂。。你们太高估人家了。。

即使是 Google 也只是通过 Cookie 或类似的东西来判断你以前是否登录过的,因为我的浏览器关掉就删 Cookie,所以每次登录 Google 都要重新二次验证。互联网的技术没那么复杂,就这么点东西而已。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号