快好知 kuaihz订阅观点

 

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,最终获取用户信息。

相关阅读

API接口入门(一):读懂API接口文档

API接口入门(一):读懂API接口文档

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:入门  入门词条  接口  接口词条  原理  原理词条  流程  流程词条  授权  授权词条