面对某跳动面试官:说说微信扫码登录背后的实现原理?惊了,这该怎么回答?

引言

这个问题我是在今年8月份的时候被问到过,当时一脸懵,当面试官一提出这个问题,我当场回答这个没接触过,可能不知道。面试官笑了笑:这是一个设计题,如果你原本就会的话,我就不会要你来设计了。

我:(苦笑...)凭借三寸不烂之舌和面试官讨论了起来,说完之后信心满满,但结果反手就收到了一份正式地感谢信。

当时,面试官问你还有什么想要问我的吗? 我请教了这个问题,面试官回答说,你其实也猜到了一点,但是我想要的那个逻辑你没理清楚,然后吧啦吧啦引导了一下,告知可以待会学习一下,这个也挺多人讨论的。


直到今天,又收到了一份“新”的感谢信后,我突然回想到了这个问题,想了想,这个问题不能一直丢着不管,我不去学习,当然不会自然就明白其中原理,下面我们一起来探讨一下吧。

如若有帮助到您,请一键三连,当然,本文表述有问题的地方,欢迎读者指正,也是一个学习的过程,谢谢~

基本技术原理

扫码登录功能到底是什么样的?

现在大部分手机上都装有微信、qq和淘宝这一类的软件。而这些app都有他们相对应的网页端。为了让用户在使用他们的网页时登录更加方便和安全,使用手机扫一扫就可以登录的服务,就显得自然而然了。

那么,此时问题来了,我们访问某个网页,这个网页怎么就出现了这个二维码呢?有了这个二维码了,它怎么知道是我扫的,还是其它人扫的呢?好神奇啊!当时面试完之后,我就有这个疑惑,下文我们逐一解答。

二维码是怎么出现的?

首先,用户打开网站的登录首页的时候,浏览器就会向对应网页服务器发送获取登录二维码的请求,服务器收到请求后,会随机生成一个 uuid,将这个 uuid 作为key值存入redis服务器,同时设置一个过期时间,一旦过期后,用户登录二维码需要进行刷新重新获取。

同时,将这个key值和公司的验证字符串合在一起,通过二维码生成接口,生成一个二维码的图片。然后,将二维码图片和 uuid 一起返回给用户浏览器。

例如,对于某个登录的网页(我打开的是力扣的微信登录地址),我们习惯性地打开了浏览器的开发者工具,我发现当我在登录页面停滞一小会(大概30秒样子),请求链接会不断发生变化,如下图所示:

其中就有一个字段 uuid,伴随着链接的更新而自增变化。这就很好解释了上文,服务器端会通过这个 uuid 调用相关接口来返回给浏览器一个二维码。

所以,二维码是谁生成的呢?别急,继续分析:

  • 当用户打开网站后,网站后台根据微信 OAuth2.0 协议向微信开发平台请求授权登录,并传递事先在微信开发平台中审核通过的 AppID 和 AppSecrect 等参数

  • 微信开发平台对AppID等参数进行验证,并向网站后台返回二维码

  • 网站后台将二维码传送至网站前端进行显示

原来,还有微信开发平台参与,由它来生成我们的二维码,OK,我们接着下一个问题的思考。

怎么知道是我扫了这个二维码?

上文我们了解到了二维码的生成,并且在将 uuid 作为key值存入redis服务器,那么只有这个 key 值,哪里来的用户相关信息呢?带着这个思考,继续探讨吧。

上文我们获取了网页二维码,现在来到了用户扫这个二维码的时候了,当用户拿出手机扫描二维码,就可以得到一个验证信息和一个 uuid。由于手机端已经进行过了登录,在访问手机端的服务器的时候,参数中都会携带一个用户的token,手机端服务器可以从中解析到用户的 userId(这里从token中取值而不是手机端直接传userid是为了安全,直接传userid可能会被截获和修改,token是加密的,被修改的风险会小很多)。

手机端将解析到的数据与微信账号绑定,向微信开发平台发送登录验证请求,微信开发平台验证绑定数据,调用网站后台的回调接口,发送授权临时票据 code ,如果授权成功,返回一个确认信息给手机端。

手机端收到返回后,将登录确认框显示给用户(防止用户误操作,同时使登录更加人性化)。用户确认是进行的登录操作后,手机再次发送请求。服务器拿到 uuId 和 userId 后,将用户的userid作为value值存入redis中以uuid作为key的键值对中。

  • 网站后台接收到code,表明微信开发平台同意数据请求

  • 网站后台根据code参数,再加上AppID和AppSecret请求微信开发平台换取 access_token

  • 微信开发平台验证参数,并返回 access_token

  • 网站后台收到 access_token 后即可进行参数分析获得用户账号数据

这里,我们就拿到了用户的相关信息了。

  • AppID:应用唯一标识,在微信开放平台提交应用审核通过后获得

  • AppSecret:应用密钥,在微信开放平台提交应用审核通过后获得

  • code:授权临时票据,第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token 即失效。code的临时性和一次性保障了微信授权登录的安全性。

  • access_token:用户授权第三方应用发起接口调用的凭证

整个过程从网站后台向微信开发平台请求授权登录开始,最终目的是为了获得 access_token。

在获得了 access_token 后就可以解析用户的一些基本信息,包括头像、用户名、性别、城市等。这样一来,整个微信扫描登录的过程就完成了。

整个过程流程图

本文参考

冷血之心的博客:微信扫码登录原理解析

乔戈里:阿里面试官:分别说说微信和淘宝扫码登录背后的实现原理?

微信扫码登录的几秒钟里,到底发生了什么

感谢以上大佬的文章,尊重劳动成果,特此提出原本链接。

最后

文章产出不易,还望各位小伙伴们支持一波!

作者:Chocolate
链接:https://juejin.im/post/6881597417637511181
来源:掘金

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271