不积跬步,无以至千里

扫码授权


扫码授权登录

扫码授权登录涉及到两个流程,一个是扫码,一个是授权,这里的授权使用的是Oauth2.0协议.

扫码

这里的码就是现在常见的二维码(QR Code,QR全称Quick Response),一个二维码可以看做一个文本信息,目前常用到的是表示一个链接,通过客户端扫码二维码获得其中的链接信息,然后做相关的跳转.

//TODO:补充二维码记录信息的原理

在一个完整的扫码流程中包括两个步骤,一个是将信息存入二维码,一个是从二维码中读取信息.

Oauth2.0

//TODO

交互流程

扫码授权时序图.jpg

这里模拟的是pc web端通过抖音授权登录

1, 2-1,2-2,3-2

对于接入了抖音授权登录的页面,当用户点击抖音登录时,浏览器通过请求指定的地址获取二维码页面模板,并再次请求开发平台获取二维码.

3-1

在请求二维码时,将携带接入时申请的AppKey和授权成功后的跳转地址以及其他透明数据.

3-2

在3-2中,开发平台

a. 将客户端扫码后的跳转地址(5-1中的请求地址)打包成二维码信息,并为这个二维码生成一个全局唯一的token

b. 以token为key,请求中携带的AppKey,跳转地址做value保存起来.

c. 返回token

4-1,4-2;5-1,5-2

客户端通过扫描二维码,获得跳转地址,客户端通过请求这个跳转地址获得用户授权的页面信息

7,8

用户点击确认授权按钮,触发浏览器请求开放平台的用户确认授权地址,此时,开放平台将更改此二维码对应token的状态.

轮询

浏览器在接收到token之后,将不断轮询服务器,获得当前二维码的状态.若用户以确认授权,通过指定token查询状态时将会得到confirmed状态,此时开放平台通过token拿到当前接入方的跳转地址,并将授权码和透明信息拼接在跳转地址后

浏览器在获得授权码后,即可通过Oauth2.0协议换取access_token,并根据access_token获取用户的相关信息.

由此一个完整的扫码授权流程结束.以上只是一个大概的流程,在实际的流程中,还需要做安全策略和异常流程的考虑

通过流程的梳理,可以发现这个流程的推动主要靠跳转地址的透传来驱动,而这些跳转地址通过开放平台去下发,对于客户端和接入方来说,接入成本还是挺低的,对于开放平台来说,接口的封闭性也得到了保证,当需要做接口的变动迭代时,不需要再考虑做旧版本的兼容