代码层面考虑将模拟登录淘宝分为以下四个步骤:输入用户名后,浏览器会向淘宝(taobao.com)发起一个post的请求,判断是否出现滑块验证
用户输入密码后,浏览器向淘宝(taobao.com)又发起一个post请求,验证用户名密码是否正确,如果正确则返回一个token浏览器拿着token去阿里巴巴(alibaba.com)交换st码
浏览器获取st码之后,拿着st码获取cookies,登录成功模拟登录实现1.判断是否需要验证码目前我们在登录淘宝的时候,大多数情况下是不会出现滑块验证码,尝试了很多次的登录退出也只是在中间出现过一次,那究竟是什么在控制是否需要滑块验证码的呢?从上图可以看出,当输入用户名后,浏览器就会发起一个post请求,来验证是否需要出现滑块验证码,如果返回true,滑块验证码则出现
否则不出现,一般是不会出现
图中我们可以看到这次post请求上传了两个参数:username、ua
前面说过ua为浏览器、ip、设备信息等多信息加密参数,所以猜想淘宝的验证码是否出现不仅仅从账号角度,还有ip、设备等角度
举个例子:某台设备可能出现登录过大量的账号,这时候淘宝就可以从ua参数中获取设备号,然后对该设备进行限制
知道了流程和请求链接及参数之后,我们就可以用代码来请求了
2.验证用户名密码这里一步也就是上面时序图图中的第5步:请求登录,这里会将用户名、ua参数、加密密码等30十几个参数post到淘宝(taobao.com)去验证我们来用代码实现一下,参数很多别被吓到,都是从浏览器复制过来的
请求结果可以看到申请st码链接后面带了一个token3.申请st码上面我们已经申请到了淘宝(taobao.com)的token,这一步就是用token来换取st码到这里很多人可能会有疑问:为什么淘宝登录需要这么麻烦呢?直接在 taobao.com 登录不就可以吗?为什么要先在taobao验证用户名密码,通过之后再去 alibaba.com 换取st码登录呢?任何公司的框架都是慢慢演变的结果,我猜想最开始的淘宝登录肯定没这么复杂但是随着阿里巴巴的慢慢壮大,很多事业线都划分开来,但是这些事业线之间又有关联性,比如用户登录了淘宝账号之后天猫就不需要再登录(注意淘宝和天猫的顶级域名不同,所以不能共享cookis)为了实现这个功能,单点登录就出现了单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统 ——百度百科很多大企业几乎都有做单点登录,那阿里的单点登录系统肯定是由母公司阿里巴巴(alibaba.com)来做啦,所有子公司去调用母公司接口
我们再回来分析淘宝登录为何要如此复杂就很好理解了:用户数据在淘宝这里,所以需要现在淘宝(taobao.com)验证用户名和密码,验证通过生成一个token,浏览器拿着token去和阿里巴巴(alibaba.com)申请单点登录码(st码),阿里巴巴收到请求验证token通过则返回st码,所以用token换st码的原因就在于单点登录
理解了设计原理之后,代码实现起来就很清晰了
4.使用st码登录成功获取st码之后我们就可以来登录了,这一步是通过st码获取登录的cookies到这里我们就已经模拟登录淘宝成功了
5.获取淘宝昵称其实上面我们就已经登录淘宝成功并返回用户主页的链接,我们为了进一步验证登录成功,就请求一下淘宝用户主页,顺便把淘宝昵称提取出来吧
作者:戴沐白链接:https://juejin.cn/post/7030377316261822472
(图片来源网络,侵删)
0 评论