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 的密码也记住呢?”。
怎么办?
我们先看下三方的交互模型
在这个场景下,用户 keithxiaoy 要储存笔记,访问他在 Y 的笔记数据库,但是他不能直接和 Y 操作,而必须通过 W。我们现在要解决的,就是让 keithxiaoy 放心,也让 Y 放心的方案。
大家联想到我开头写到的「支付宝」了吗?
Oauth2.0 就是类似于原始「支付宝」的功能,为了解决这个信任危机而提出来的交互模型。它告诉人们,在这种场景下,三方要怎么解决彼此的信任危机。
具体来说,Oauth2.0 的交互模型的核心是这个样子的:
资源拥有者:keithxiaoy
客户端:W 企业
资源服务器:Y 企业
鉴权服务器:类似于支付宝的功能,是一个对用户的身份进行认证、并对客户端进行授权的地方。一般情况下,鉴权服务器也是 Y 公司
再回头来看开头的那张授权图。
第三方授权的原理,其实就是 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 协议到底是干什么的?的主要内容,如果未能解决你的问题,请参考以下文章