扫码登录浅析

9 篇文章 0 订阅
3 篇文章 0 订阅

扫码登录浅析

不论是微信还是淘宝,很多主流网站为了减少用户在电脑上二次输入账户密码的操作,都支持了扫码登录流程。这极大方便了用户操作,因为并不是所有人都记得住微信、淘宝或者支付宝的密码,这些 App 的登录时效都很长,并且支持续期,很多 App 在你每次打开的时候都会给你续期,这意味着常用的 App 在很长一段时间里都只需要登录一次,App 服务爆炸的今天,根本记不住那么多密码,所以有了扫码登录。

1. 用户访问一个无需登录网站

用户访问一个网站的时候,只需要在浏览器中输入一个地址。如:https://www.google.com ,就可以获得相应的服务。
图1. 访问谷歌网站

2. 用户访问一个可登录网站

  1. 当访问一个网站的时候,网站后台会为本次访问建立一个会话(session),我们可以认为在服务器为当前用户开辟了一块空间。会话的信息会存储在服务器上面。
  2. 服务器保存了会话的信息,并将会话的标识返回给浏览器,即返回 session_id。服务器根据session_id 来区分不同的会话。
  3. 用户带着这个 session_id访问服务,服务器进行身份权限等判断。
  4. 首次访问的时候,服务器的 session 空间里面没有身份验证相关信息,即返回给浏览器,“用户未登录”。
  5. 用户带着 session_id和账户密码信息访问服务器
  6. 服务器接受到 session_id 和账户密码等信息,服务器去获取数据。
  7. 服务器将数据存入 session_id对应的session 空间中。
  8. 下一次用户带着 session_id来访问的时候,session 中就有该用户对应的信息,标识为“用户已登录”,就可以获取改用户对应的服务。
    在这里插入图片描述

3. 用户扫码登录流程

3.1 扫码登录基本原理
  1. 用户访问一个网站(如:xxx.xxx.com),后台生成一个唯一的 id:asdf-qwer==,二维码中的内容为:http://xxx.xxx.com/asdf-qwer==,这个内容可以自定,也可以短链接
  2. 用手机对应的 App 扫描二维码,获取到 id:asdf-qwer==
  3. 将获取到的 id 和当前手机登录的用户绑定,发送给服务器
  4. 服务器获取到 绑定的 id和用户信息,表明当前用户 id 对应的用户就是当前用户
  5. 将信息和服务同步给PC浏览器,用户登录成功,可获取对应服务。同步的方式有 webSocket,或者轮询。
    在这里插入图片描述
3.2 扫码登录流程和原理
  1. 在手机 App 上登录,得到相应的 appToken,appToken可以认为是用户标志。
  2. 网页访问对应服务登录页面。(如微信:https://wx.qq.com/)
  3. 服务器生成对应的 session,并生成唯一loginToken,通过 loginToken 生成二维码,二维码携带的信息是一个需要验证的 URL,如:https://login.weixin.qq.com/l/wboQ7B7IRg== ,wboQ7B7IRg这段可以认为是这儿的 loginToken,wboQ7B7IRg这段可以认为是这儿的 loginToken。
  4. 手机扫描二维码,获取到 loginToken。
  5. 将 loginToken、appToken,其他需要的信息发送给服务器。
  6. 服务器验证 loginToken、appToken 等信息,验证通过后将对应信息放入 session 中,手机弹出登录确认界面,并将需要的信息返回给 PC 端,PC端通过 sessionId轮询或者 webSocket方式获取 session中的信息。
  7. 手机确认登录。服务器通知 PC 端登录成功。
    PS:登录的刷新,失效,重新登录,生命周期等由具体业务决定。

4. 扫码登录利弊

4.1 好处
  1. 风险由客户端承担,需要做好客户端的安全。
  2. 用户不需要输入账户密码,操作方便。
  3. 降低账号密码泄露的风险。
  4. 浏览器的 token 生命周期短,使用长时token 替换短期 token,风险减低。账密相当于一个永久时效 token。
4.2 弊端
  1. 用户对于扫码没有警觉性,容易被钓鱼。由于时效等原因,被钓鱼的几乎没有。除非你是鱼,让人家钓。
  2. 非智能手机不支持~
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值