API接口入门(三):用户授权流程原理
本文通俗易懂地剖析用户授权的设计原理和四种授权模式,重点介绍授权码登录模式,适合阅读的人群:开放平台/第三方合作的产品经理,初入职场的产品经理。
1. 应用场景
我们每个人都遇到过授权登录的环节,授权登录的应用无孔不入,可能你是在授权应用权限,或是授权账户登录,或是授权个人信息。
我们常见的应用场景一般有以下:
- 新安装应用:授权获取存储空间,设备信息等(手机原生弹窗)
- 支付宝授权登录淘宝:授权使用支付账户登录淘宝APP(淘宝原生页面)
- 微信打开美团外卖:授权获取你的头像和地理位置(微信原生弹窗)
因而授权登录是应用间交互的重要且广泛的步骤,深入了解过其中的原理很有必要。
2. 授权登录是什么?
以美团外卖授权获取你的头像和地理位置为例:
- 头像和地理位置属于你的个人信息,如需要传输,必须经得本人的同意,法律不允许默认传输。
- 授权登录是经得资源所有者(亦即是用户)同意,服务提供商(亦即是微信,他为你提供授权服务)提供授权服务和应用方(他来使用你的授权)使用授权的过程。
字面意思就是如下图流程:
值得关注的是第3步和第4步:当你在授权的过程中,实则是你和微信的直接交互,与美团外卖小程序无关。
亦即是:你是跟微信同意授权,也是微信接收到你的“同意”的指令,即使在网站用微信登录也是如此,如豆瓣登录,需要微信扫描二维码,确保授权动作保留和发生在微信自己的环境内。
3. 授权登录的模式
那么从形式来说,授权登录可以分为静默授权和手动授权两种模式:
- 静默授权:一般是用于获取一些类似于用户ID的信息,比如每个用户在微信的ID被称为openid,这种ID只是用户的唯一身份认证(相当于编号),不包含个人信息,应用获取openid并不能分析出你的手机号和身份证号这些个人信息。显然,很多用户都不知道openid是什么,总不能弹个弹窗问用户“你是否同意传输openid”吧。因而这类传输,用户是无感的,用户只需访问了某个页面,后台会向微信请求拿到你的openid。
- 手动授权:这种亦即是我们上文提到的用户场景,这类型场景需要获取的信息是你的个人信息,比如头像,昵称,手机号和地址等等。这些个人信息是必须经过用户手动点击同意的。
4. OAuth2原理及剖析
以上第2点是授权的基本简化,本节是更重点介绍OAuth2的系统链路流程(无论是静默或是手动,系统链路一致,只是形式的区分)。目前市面上涉及授权,权限申请的业务均通过OAuth2的方法进行设计。
OAuth2具体可以分为以下四种:
- 授权码模式(authorization code)【重点】
- 简化模式(implicit)
- 密码模式(resource owner password credentials)
- 客户端模式(client credentials)
4.1 授权码模式
其中最重要的就是第一种授权码模式,接下来我以企业微信授权码方法做解析,其流程图非常清晰。
例子讲解:
场景:该身份授权是用户在企业微信使用第三方应用时拉起授权页面的流程。类似于你在微信打开饿了么小程序。
系统交互的步骤:
- 用户在企业微信打开一个A应用。此时A应用通过静默推送获取到用户的userid,发现这个用户没有头像和昵称信息在A应用的数据库。
- 此时,A应用调用企业微信的OAuth认证链接,这个链接要带上企业ID(表明应用方),权限获取范围(头像+昵称),标记本次授权的编号(state)和授权完跳转的地址,做好链接之后,向微信发送过去。
- 企业微信收到请求后,校验企业ID和授权跳转的地址是否对应。如果验证通过,企业微信会给A应用一个令牌(code),并在前端打开企业微信的授权页面(该页面由企业微信管理)。
- 用户点击授权了之后,企业微信可以利用code和state向企业微信请求用户信息API,获得用户token,最终获得指定用户信息。
- 同时用户点击授权后,企业微信关闭授权页,并跳转到A应用在第2步提供的跳转地址。
4.2 简化模式
请记住第一个模式中的第(1)步和第(2)步都需要A应用处理,简化模式就是简化了第(2)步。
以下在微信的场景仅用于举例:
- 用户点击应用入口之后,微信直接让用户是否同意授权(授权的内容和触发时间提前配置好),用户点击同意。
- 用户同意后,跳转到该应用在后台预留的地址,并且微信把访问令牌直接告诉应用。
- 应用利用访问令牌找微信获取用户信息,完成。
此处你有没有发现,前面授权的过程并不需要应用本身参与,这个就是比授权码模式简化的地方。但这种模式不支持用户令牌的更新,也就是用户第一次授权过期了之后,下一次又需要重新手动授权。
4.3 密码模式
这种模式很直接,相当于你把你微信的账户密码告诉饿了么,饿了么利用你的账户密码去获取信息。这种方式极其不安全,用户的账户信息随时会被外泄。
4.4 客户端模式
这种其实不属于授权,实则就是两个应用间直接进行信息传输,与用户无关。
5. 总结
- 授权分为静默授权和手动授权,一般出现在打开应用登录的环节,应用广泛。
- 授权的组件或页面必须在拥有数据的应用中,这样才能确保用户在授权页上同意协议,清晰看到传输的数据范围,以及确保用户亲手同意授权。
- 授权分为四个模式,其中授权码模式是应用最广泛,最重要的模式。
- 授权码模式亦即是A应用拼接企业参数向企业微信请求打开授权页面,获取用户授权码code,再利用code获得用户的token,最终获取用户信息。
相关阅读
作者:就是爱睡觉,电商和金融业行业的产品,以TO B业务为主,文章是用于记录自己在产品工作的思考和想法,希望有想法的小伙伴共同交流。
本文由 @就是爱睡觉 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
API接口入门系列三篇文章写的好棒,小白从中学到了很多,感谢作者的分享
写的真好,后面这部分我的脑袋开始不够用了
感谢精彩的分享
太厉害了,我也是产品经理,但对技术知之甚少,有推荐的课程吗?
感恩分享
非常棒,不懂技术的也能看懂
这样的文章真好,易懂
感觉像是技术人员研究的东西啊
坐等更新
通俗易懂,这些都是作者自己在工作中自己研究的吗,佩服佩服
点个赞,写得不错,对于我这样的小白也比较好懂!
没得人评论呢