(1)网页端的安全登录设计
很多大型网站都有登录限制。这里以一个案例作为例子完整解析。理解安全的登录设计方式,无论对于以后做自动化,自动登录网站,获取数据,还是自己开发月租类型的系统非常有用。当前一般无法避免的一个问题,比如你提供一个服务,典型的比如课程网,你已经把价格定义的很便宜了,比如25元/月,但是别人可能只需要你里面的一部分或者用一俩天,典型的比如网盘/下载/影视剧/听歌,总有人会将自己的账号出租出去获利,这是变相的损害了网站的权益。,
在系统早期没有用户的时候,无所谓用户怎么共用账号,但是到了后期实在是用户一直很多,但是收益不涨的情况下,就不得不开始一些设计的措施与反制措施。
首先,用户进入页面的时候,随机生成一个唯一设备码,只要是随机就行 类似84ec5ad9282b49dc679071da39b95564 这种长串,这样每个浏览器登录的时候,检查是否生成了一个设备码,没有设备码,生成一个并写入到cookie或者storage里面。如果用户试图登录的时候,将手机号绑定该设备码。
将设备码关系和手机号关系上报到了服务器端,服务器记录了对应关系。需要注意的是,一定要加个token验证提交端的身份,否则任意交口上报的数据,都被采用,存在上报无法验证确定安全性。
然后用户在提交手机号+密码的时候,将上一步接口的token和deviceid 俩个参数放入header里面传递。拿到了数据之后校验身份,如果设备码和手机号还有token三者不统一,表示是从不同地方提交的,可以拒绝此次登录。因为可能存在其他端欺骗服务器情况。然后才开始验证手机号+密码或者验证码的关系。
身份验证通过,会返回一个登录的token.用登录的token和设备端deviceid,去注册当前的设备在线。这样就保证了用户不用一直验证账号密码相关。将token和device进行强绑定,
(2)扫码登录的实现
如果我们测试WX的二维码,可以发现是
https://weixin.qq.com/x/aaaaaaz这种类似链接,生成这个链接的时候,已经上报到服务器中心,上报了一个自己的唯一设备号+该链接+对应token,其实是我们手机扫码的时候,访问到了远程这个资源,我们微信扫到这个链接的时候请求了远程,这样远程知道你是要在这个客户端id登录,就实现了扫码登录。
另外一个实现例子
https://xluser-ssl.xunlei.com/xluser.core.login/v3/qrlogin?redirect_uri=
Center Account Personal
客户端会提供client_id scope user_code三个参数被扫码的服务器端获取到。拿到这三个参数之后(也就是扫码客户端),再次向远程服务器发三个参数的请求,被摄像头拿到这三个参数之后,将本地软件上登录的token+设备信息+二维码的三个参数一起推送到另外一个决定扫码登录的链接。
先验证token和设备的权限是否通过检测,如果通过,可以根据客户的user_code 可以检查到客户端。如果是网页端的登录就是不断的发送当前的设备id,一获取到登录返回的接口信息就跳转进入页面里面,根据token获取登录客户的信息。这样就实现了扫码登录的逻辑功能。
所以如果是直接使用token登录,因为登录时候的设备id是绑定了这个token的,在完全无法获取设备id的时候,直接使用token必然会异常。
小结:扫码的本质是通过摄像头解二维码变成参数,然后将扫码得到的参数加上自己的授权token,向注册服务器注册,然后得到信息后登录。