微信第三方扫码登录流程抓包,主要了解扫码登录机制。还有一个原因,看到知乎上这个问题下某些作者的瞎编乱造和吹水。。哈哈
主要有2个角色,PC端浏览器(下面简称PC端),手机端微信APP(下面简称微信), 浏览器端的抓取使用 Chrome的开发者工具,手机端的抓取使用 Charles (mac上的一款抓包工具),下面是一次交互中的抓包记录,顺序进行。
PC端 点击osc上的微信登录按钮
https://open.weixin.qq.com/connect/qrconnect?appid=wx00dc77dadaf54f3b&redirect_uri=http%3A%2F%2Fwww.oschina.net%2Faction%2Fopenid%2Fafter_bind_wechat%3Fgoto%3D&response_type=code&scope=snsapi_login&state=yq56fZZhqBrIDIKAxN0Q
有几个参数 appid, redirect_uri, response_type,scope,state
PC端 显示二维码,下面是二维码的图片获取地址
https://open.weixin.qq.com/connect/qrcode/0318gIJLqTcqXhO8
PC端 开始轮训服务端,等待成功消息。微信等待结果并没有使用 websocket, 而是每秒轮训,注意 uuid 和二维码url中的参数
https://long.open.weixin.qq.com/connect/l/qrconnect?uuid=0318gIJLqTcqXhO8&_=1494921848308
微信端 使用扫一扫按钮扫码二维码(微信主要有2个步骤,扫码,点击确认登录), 和服务端的交互。 返回的是微信上的确认页面的html
https://open.weixin.qq.com/connect/confirm?uuid= 0318gIJLqTcqXhO8&key=f8d22b116d47b51e62b7220d6cab7cb5b2eefb9d7b58bace8ede258ab6dd23df49db3d66985ce58ab4e80b644fdd43c77d5ef887e9b38ea01430f6f833c65a58bf740dba719a0ba8e4eb36dc5141e480&uin=MjQzNzEzNzk2MA%3D%3D&lang=zh_CN&pass_ticket=v1xnAuk0fQLjHQj78uwv8QrEOoYZXvXadRYxz31%2BIkP%2F7IXEKuRE%2BLGIzuu5kwWH
PC端: 当微信端扫码上二维码,但是没有确认时候, PC端的轮训连接有所变化
https://long.open.weixin.qq.com/connect/l/qrconnect?uuid=0318gIJLqTcqXhO8&last=404&_=1494921848309
微信端:点击确认时候链接, POST请求,返回的也是html
https://open.weixin.qq.com/connect/confirm_reply
pass_ticket=v1xnAuk0fQLjHQj78uwv8QrEOoYZXvXadRYxz31%2BIkP%2F7IXEKuRE%2BLGIzuu5kwWH&key=f8d22b116d47b51e62b7220d6cab7cb5b2eefb9d7b58bace8ede258ab6dd23df49db3d66985ce58ab4e80b644fdd43c77d5ef887e9b38ea01430f6f833c65a58bf740dba719a0ba8e4eb36dc5141e480&uin=MjQzNzEzNzk2MA%3D%3D&uuid=0318gIJLqTcqXhO8&snsapi_login=on&allow=allow
PC端 回调osc的链接
http://www.oschina.net/action/openid/after_bind_wechat?goto=&code=061iqm0J0D3WSj2oIr0J0kz00J0iqm0w&state=yq56fZZhqBrIDIKAxN0Q
主要的参数还是 uuid,微信客户端在已经登录的情况下获取到uuid,然后告诉服务端这个用户已经登录了,服务端就可以把uuid和当前用户绑定起来,给pc端通知这个用户已经登录了。