晚上好,收集梳理了一下关于OAuth2.0的信息,作为学习笔记Mark一下。
OAuth的全称是Open Authorization,即“开放授权”。它的用途是应用A的用户通过授权,允许第三方应用在未获得用户在应用A的账号密码前提下,即可访问用户在应用A中特定的资源。
为了方便理解,举个例子:我们的手机里总还是会装着一些应用,你现在可以打开淘宝App,点击退出登录后,左下角会有一个支付宝登录,当你选择支付宝登录,并完成一系列授权和跳转重新登回淘宝App后,此时你完成了一次OAuth2.0标准协议登录,并且你淘宝App的【账号与安全】模块里会出现刚才登录过程中授权使用过的支付宝账号,不过这里更多是OpenId的概念延伸,和OAuth2.0不完全是一码事儿。
OAuth2.0在简中互联网的大量应用,本质上是账号正向业务为了用户规模和体验而做的努力,在注册和登录场景,点下授权相较于短信接码登录或密码登录确实方便不少,并且安全性甚至会更高。
OAuth2.0不是一种专利,而是一种标准,举个例子,你的护照号码是9位而不是身份证号一样的18位,是因为我们follow了国际民航组织的标准。
国内常见的支持接入OAuth 2.0登录的开放平台大概有腾讯、阿里、字节、百度、小米、华为这些。
一般来说,OAuth 2.0有4种模式:其中客户端模式和密码模式安全性较弱,适用于企业内部的不同系统之间;implicit简单模式的优点确实是简单,但access token会明文传递,安全性打了一些折扣;authorization code授权码模式是4种模式中最安全的也是被最广泛应用的,我们一般说的OAuth 2.0都是这种模式,简单讲就是用code换token,以微信开放平台为例它的交互流程图是⬇️
再回到上文中使用支付宝登录淘宝的流程,我们参考上图进行步骤拆解:
1️⃣用户访问淘宝的登录页,点击支付宝登录拉起授权窗口,点击同意(后边会拉起支付宝
2️⃣淘宝后端构造授权请求url,包含grant_type(在这个场景中是授权码code模式)、client_id(可以理解为是淘宝app在支付宝开发平台注册的app_id)、重定向地址等信息
3️⃣用户在支付宝点击同意
4️⃣支付宝将用户重定向回淘宝指定的地址,并通过url向淘宝后端发一个code
5️⃣淘宝后端用这个code和之前在支付宝开平注册的必要信息如app_id和app_secret去请求支付宝开平换取access token
6️⃣支付宝返回access token给淘宝
7️⃣淘宝拿着这个支付宝的access token查支付宝id,并定位到对应的淘宝id
8️⃣淘宝后端基于淘宝id生成一个有效token,用户完成在淘宝的登录
OAuth 2.0的安全性还依赖规范开发,权限的范围、有效期要约定,app_id、app_secret这些开发者的身份令牌也需要妥善保管。
明天打算讲讲“可信环境”,一个看着神秘但万变不离其宗的东西。