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

写在前面,本人写这篇 Oauth2.0 协议文章,只是突发奇想,了解了下市面上的第三方登录的原理。本人并没有深入去理解 Oauth2.0 协议,如果理解不对的地方,欢迎指正。

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

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

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

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

image

点击确认以后,就可以进入 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 的密码也记住呢?”。

怎么办?

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

image

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

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

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

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

image

资源拥有者:keithxiaoy

客户端:W 企业

资源服务器:Y 企业

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

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

image

第三方授权的原理,其实就是 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哥真帅…

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值