扫码授权登录
扫码授权登录涉及到两个流程,一个是扫码,一个是授权,这里的授权使用的是Oauth2.0协议.
扫码
这里的码就是现在常见的二维码(QR Code,QR全称Quick Response),一个二维码可以看做一个文本信息,目前常用到的是表示一个链接,通过客户端扫码二维码获得其中的链接信息,然后做相关的跳转.
//TODO:补充二维码记录信息的原理
在一个完整的扫码流程中包括两个步骤,一个是将信息存入二维码,一个是从二维码中读取信息.
Oauth2.0
//TODO
交互流程
这里模拟的是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获取用户的相关信息.
由此一个完整的扫码授权流程结束.以上只是一个大概的流程,在实际的流程中,还需要做安全策略和异常流程的考虑
通过流程的梳理,可以发现这个流程的推动主要靠跳转地址的透传来驱动,而这些跳转地址通过开放平台去下发,对于客户端和接入方来说,接入成本还是挺低的,对于开放平台来说,接口的封闭性也得到了保证,当需要做接口的变动迭代时,不需要再考虑做旧版本的兼容