扫码登录浅析
不论是微信还是淘宝,很多主流网站为了减少用户在电脑上二次输入账户密码的操作,都支持了扫码登录流程。这极大方便了用户操作,因为并不是所有人都记得住微信、淘宝或者支付宝的密码,这些 App 的登录时效都很长,并且支持续期,很多 App 在你每次打开的时候都会给你续期,这意味着常用的 App 在很长一段时间里都只需要登录一次,App 服务爆炸的今天,根本记不住那么多密码,所以有了扫码登录。
1. 用户访问一个无需登录网站
用户访问一个网站的时候,只需要在浏览器中输入一个地址。如:https://www.google.com ,就可以获得相应的服务。
2. 用户访问一个可登录网站
- 当访问一个网站的时候,网站后台会为本次访问建立一个会话(session),我们可以认为在服务器为当前用户开辟了一块空间。会话的信息会存储在服务器上面。
- 服务器保存了会话的信息,并将会话的标识返回给浏览器,即返回 session_id。服务器根据session_id 来区分不同的会话。
- 用户带着这个 session_id访问服务,服务器进行身份权限等判断。
- 首次访问的时候,服务器的 session 空间里面没有身份验证相关信息,即返回给浏览器,“用户未登录”。
- 用户带着 session_id和账户密码信息访问服务器
- 服务器接受到 session_id 和账户密码等信息,服务器去获取数据。
- 服务器将数据存入 session_id对应的session 空间中。
- 下一次用户带着 session_id来访问的时候,session 中就有该用户对应的信息,标识为“用户已登录”,就可以获取改用户对应的服务。
3. 用户扫码登录流程
3.1 扫码登录基本原理
- 用户访问一个网站(如:xxx.xxx.com),后台生成一个唯一的 id:asdf-qwer==,二维码中的内容为:http://xxx.xxx.com/asdf-qwer==,这个内容可以自定,也可以短链接
- 用手机对应的 App 扫描二维码,获取到 id:asdf-qwer==
- 将获取到的 id 和当前手机登录的用户绑定,发送给服务器
- 服务器获取到 绑定的 id和用户信息,表明当前用户 id 对应的用户就是当前用户
- 将信息和服务同步给PC浏览器,用户登录成功,可获取对应服务。同步的方式有 webSocket,或者轮询。
3.2 扫码登录流程和原理
- 在手机 App 上登录,得到相应的 appToken,appToken可以认为是用户标志。
- 网页访问对应服务登录页面。(如微信:https://wx.qq.com/)
- 服务器生成对应的 session,并生成唯一loginToken,通过 loginToken 生成二维码,二维码携带的信息是一个需要验证的 URL,如:https://login.weixin.qq.com/l/wboQ7B7IRg== ,wboQ7B7IRg这段可以认为是这儿的 loginToken,wboQ7B7IRg这段可以认为是这儿的 loginToken。
- 手机扫描二维码,获取到 loginToken。
- 将 loginToken、appToken,其他需要的信息发送给服务器。
- 服务器验证 loginToken、appToken 等信息,验证通过后将对应信息放入 session 中,手机弹出登录确认界面,并将需要的信息返回给 PC 端,PC端通过 sessionId轮询或者 webSocket方式获取 session中的信息。
- 手机确认登录。服务器通知 PC 端登录成功。
PS:登录的刷新,失效,重新登录,生命周期等由具体业务决定。
4. 扫码登录利弊
4.1 好处
- 风险由客户端承担,需要做好客户端的安全。
- 用户不需要输入账户密码,操作方便。
- 降低账号密码泄露的风险。
- 浏览器的 token 生命周期短,使用长时token 替换短期 token,风险减低。账密相当于一个永久时效 token。
4.2 弊端
- 用户对于扫码没有警觉性,容易被钓鱼。由于时效等原因,被钓鱼的几乎没有。除非你是鱼,让人家钓。
- 非智能手机不支持~