如何抱上微信的大腿?——说说授权登录的那些事儿
当前市面上流行的手机游戏,很多都会用到微信的授权登录系统,就是这个:
你肯定点过这个「确认登录」按钮,而且不止一次。然而,你没有想过,在微信里,这个功能是如何实现的?为什么不用我输入用户名和密码,游戏app就获得了我的微信好友信息?它安全吗?带着这几个问题,我们开始今天的探索之旅。
在进入技术细节前,我们先来看一个栗子。
从前有个大户人家姓白,富可敌国,家中收藏了大量的奇珍异宝。有一天,当地博物馆的馆长找到白先生,想为白先生在博物馆设立一个展台,每天借白先生家中的一些收藏品放在展馆展示。白先生觉得这个主意不错,但又不想把库房的钥匙给馆长,就让馆长去联系库房商量宝物借用事宜。库房跟白先生确认这件事之后,给了馆长一蓝一红两张令牌:蓝色的令牌上标注着使用日期,在有效期内,馆长可派人用蓝色令牌随意借还张家的宝物;当蓝色的令牌失效后,馆长需要派人带着红色令牌到库房这里换新的蓝色令牌。馆长拿到这两张令牌后,欣然离去。
上面的栗子,简单描述了移动应用微信登录的授权流程,以及授权后用户数据的获取方式(使用令牌),文中的「白先生」就是用户,他授权「馆长」(三方应用)使用自己存放在「库房」(微信服务器)中的宝物(用户数据、关系链等)。「蓝色令牌」是「库房」给「馆长」借用宝物的通行证,有一定的时效性,这是由于「蓝色令牌」使用的较为频繁,万一「遗失」或者「被盗」,造成的损失也有限。「红色令牌」则是「馆长」更换「蓝色令牌」的凭证。
微信授权登录系统基于OAuth(发音:偶奥斯)2.0协议标准,它提供了一套简单,安全的交互流程,让三方应用可以在不知道用户微信登录名和密码的情况下,访问用户在授权方服务器上的私密数据和资源。当三方应用需要使用微信授权登录功能时,需要先在微信开放平台获得对应的AppID和AppSecret。下面,我们看下微信授权登录系统的授权流程:
- 用户请求三方应用用微信号登录。
- 三方应用使用AppID向微信开放平台(客户端)发送登录请求。
- 客户端加载授权页面,请求用户确认。
- 用户点击确认按钮。
- 微信客户端拉起三方应用,并将临时授权码(code)传递给三方应用,予授权完成。
- 三方应用使用临时授权码(code)、AppID和AppSecret,通过https协议向微信开放平台(服务器)请求access_token。
- 服务器返回access_token和refresh_token。
access_token就是从服务器获取用户数据的「蓝色令牌」,refresh_token则对应「红色令牌」。access_token的有效期是两个小时,refresh_token的有效期是30天。
通过分析授权流程可以看出,要想获取access_token,需要同时具备临时授权码(code)、AppID和AppSecret这三个信息,其中临时授权码由用户点击「确认登录」按钮后由服务器生成,它的有效期只有几秒,所以三方应用只要妥善的保管AppSecret和access_token,整个流程的安全性是值得信赖的。
另外,微信已经提供了该功能对应的SDK,使得三方应用的接入工作变得十分简单。
微信等社交软件,经过几年时间苦心经营建立的关系链,其他的三方应用则只需要简单的接入就可以共享这个巨大的宝藏。然而,当大家都沉浸在这个宝藏中时,微信的生态圈也越来越壮大了。子曰「大家好才是真的好!」,古人诚不我欺!
#专栏作家#
给产品经理讲技术,微信公众号(pm_teacher),人人都是产品经理专栏作家。资深程序猿,专注客户端开发若干年,对前端、后台技术略懂,热衷于对新的科技领域的探索。
本文原创发布于人人都是产品经理,未经许可,不得转载。