Oauth2.0 协议到底是干什么的?

Posted NoBug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oauth2.0 协议到底是干什么的?相关的知识,希望对你有一定的参考价值。

今天登录一个从未体验过的 App ,提醒要注册。一般情况下,我都会拿一个小号作为第三方登录的源泉,而不选择用手机号去注册。


这里的套路,大家都明白吧?


能不填手机号,就尽量别填,营销短信实在是太多了,防不胜防啊!


想必大家都用 QQ/微信 登录过第三方软件,如下图所示。



点击确认以后,就可以进入 App 使用了。而不需要再通过手机号、邮箱等方式去注册。之前我一直在想,这实现原理究竟是什么呢?


能够做出第三方登录的那几家大厂,不可能直接暴露用户帐号和密码的接口给对方的。中间肯定是有一个媒介,作为两边数据互通的桥梁,相当于多年以前「支付宝」的角色。


大致思路已经知道了,接下来具体的业务场景是怎么交互的。


假设有两家软件企业 W 和 Y,其中 W 企业我们假设为微信, Y 企业假设为印象笔记。即 W (微信)的用户可以把各种资料、表情包传到 Y印象笔记)上长期保存,然后可以在不同的设备上查看。


如果你是这个需求的开发,会怎么去实现?


W (微信):让 Y (印象笔记)给我们提供一个接口,我怎么牛批,难道还要我去适配它?开玩笑。。。


赶紧的,速速给我提供一个接口:


https://keithxiaoy.com/saveData?account=nobug&data=kgezuishuai...


参数:account = Y 的登录账号 、data = 保存的数据 


返回:成功 true、失败 false


有了这个接口,W 软件只需在界面上显示一个输入框,让用户输入他的 Y 软件账号,然后调用这个接口来保存数据即可。


实现起来这么容易?怎么可能。。。


不行?你总要给我个说法吧。


开放这样一个接口,相当于直接把 Y 公司的保存数据的接口全部暴露在网上,对于黑客来说,要发现这个接口太容易了。这样的话,Y 公司的用户数据就很危险了。


那怎么办?


这样吧,为了保证不能存数据到 Y ,我们把接口改成这样:


https://keithxiaoy.com/saveData?account=nobug&password=kgezuishuai&data=kgezhentamashuai....


除了要求 W 用户输入账号,还要输入密码。只有当账号密码验证通过,数据才保存到 Y 服务器。这样,即使黑客发现了这个接口,他不知道用户的密码,也就没办法作恶了。


这样总行了吧?


如果不是我这次查了下 Oauth 协议,我就理所当然的认为安全了。虽然黑客可以用撞库破解密码,但就我们这点隐私,还不至于让黑客发动攻击吧!


不就是保存点学习资料吗?黑客难道想跟我学习日语吗?


现实中,这个方案还是不可行!为什么?


因为两个企业之间根本没有信任可言,商场如战场。人与人之间的信任都很难实现,更不要说两个企业之间了。


Y 企业会想,W 企业会不会偷偷收集用户的帐号和密码。如果这些都让他知道了,那公司离倒闭也不远了。


站在用户的角度,用户会想“凭什么要我在 W 软件里面输入 Y 的密码,W 软件会不会把我 Y 的密码也记住呢?”。


怎么办?


我们先看下三方的交互模型


Oauth2.0 协议到底是干什么的?

在这个场景下,用户 keithxiaoy 要储存笔记,访问他在 Y 的笔记数据库,但是他不能直接和 Y 操作,而必须通过 W。我们现在要解决的,就是让 keithxiaoy 放心,也让 Y 放心的方案。


大家联想到我开头写到的「支付宝」了吗?


Oauth2.0 就是类似于原始「支付宝」的功能,为了解决这个信任危机而提出来的交互模型。它告诉人们,在这种场景下,三方要怎么解决彼此的信任危机。


具体来说,Oauth2.0 的交互模型的核心是这个样子的:

Oauth2.0 协议到底是干什么的?


资源拥有者:keithxiaoy

客户端:W 企业

资源服务器:Y 企业

鉴权服务器:类似于支付宝的功能,是一个对用户的身份进行认证、并对客户端进行授权的地方。一般情况下,鉴权服务器也是 Y 公司


再回头来看开头的那张授权图。


Oauth2.0 协议到底是干什么的?


第三方授权的原理,其实就是 Oauth2.0。


在这个页面输入 Y 企业的帐号和密码,那么 W 企业是无法拿到的。


如果用户同意授权登录,鉴权服务器会通知 Y ,并给 W 发送一个访问令牌 Access Token 。有了这个访问令牌,W 就可以到 Y 的服务器上面去保存资源或者获取资源了。


最后,真正的接口形式会是这样的:


https://keithxiaoy.com/saveData?accesstoken=xxxxxx...


Y 的服务器在接收到这个请求之后,会拿着 Access Token,再去找鉴权服务器,检查这个 Access Token 的合法性和权限,如果通过的话,才返回数据给客户端 W。


看到这里,大家明白 Oauth2.0 协议到底是干什么的了吗?


嗯嗯,明白了,K哥真帅...


文中举例皆虚构,不代表现实世界任意一家企业。如有雷同,纯属巧合。


推荐阅读:




不要给自己的人生设限


以上是关于Oauth2.0 协议到底是干什么的?的主要内容,如果未能解决你的问题,请参考以下文章

Oauth2.0协议简介

OAuth 2.0只是授权协议,OIDC才是认证授权协议

低代码如何构建支持OAuth2.0的后端Web API

低代码如何构建支持OAuth2.0的后端Web API

低代码如何构建支持OAuth2.0的后端Web API

OAuth2.0是什么?授权模式(纯理论)