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: OAuth2.0 是一个用于授权的开放标准协议,它允许用户授权第三方应用程序(如社交媒体应用程序)访问他们的受保护资源(如照片、视频等)。OAuth2.0 的主要目的是为了减少用户在第三方应用程序和资源服务提供者之间共享凭证的需求,从而提高安全性并减少安全风险。 OAuth2.0 的主要组成部分包括: 1.授权服务器:用于管理用户授权的服务器,验证用户身份并颁发访问令牌。 2.资源服务器:存储和管理受保护的资源。 3.客户端应用程序:代表用户请求访问受保护资源的应用程序。 4.访问令牌:由授权服务器颁发给客户端应用程序,用于访问资源服务器中受保护的资源。 5.刷新令牌:用于更新访问令牌,以便客户端应用程序可以持续访问受保护的资源。 使用 OAuth2.0,用户不需要将他们的用户名和密码直接提供给第三方应用程序,从而提高了安全性和隐私保护。但是,使用 OAuth2.0 也存在一些安全风险,例如客户端应用程序的恶意行为可能导致访问令牌泄漏。为了解决这些问题,开发者需要遵循 OAuth2.0 的最佳实践,并在实现过程中注意安全性。 ### 回答2: OAuth2.0(开放授权)是一种授权框架,用于授权第三方应用程序访问用户资源。它允许用户将他们在某个资源所有者(如Facebook、Google)处的身份验证信息提供给其他站点或应用程序进行访问,而不需要共享他们的用户名和密码。OAuth2.0所解决的问题是用户如何安全地授权第三方应用程序访问他们的个人数据。 在过去,用户通常需要将他们的用户名和密码提供给第三方应用程序,以使其能够访问他们的个人数据。然而,这样的方式存在很多潜在风险,因为用户的敏感信息可能会被盗取或滥用。为了解决这个问题,OAuth2.0允许用户通过对资源所有者进行身份验证来授权第三方应用程序的访问权限。 OAuth2.0通过引入授权服务器和令牌的概念来实现这里的授权过程。当用户希望授权第三方应用程序时,他们将被重定向到授权服务器,在授权服务器上他们输入其凭证进行身份验证。一旦身份验证成功,授权服务器将向第三方应用程序颁发一个访问令牌,该令牌允许第三方应用程序代表用户访问用户资源。 这种方式的优点在于用户不需要共享其用户名和密码,只需授权给第三方应用程序访问特定资源的权限。如果第三方应用程序滥用权限,用户可以随时撤销访问令牌,从而终止对其个人数据的访问。 总之,OAuth2.0是一种安全的授权框架,通过授权服务器和令牌概念,解决了用户如何安全授权第三方应用程序访问其个人数据的问题。 ### 回答3: OAuth2.0是一种开放授权协议,用于在不泄露用户账号密码的情况下,允许用户授权第三方应用或网站访问其受保护的资源。 OAuth2.0协议的主要目的是解决用户在多个应用间共享资源时所面临的问题。在传统的授权方式中,用户需要提供自己的账号密码给第三方应用,这样做存在安全风险,因为第三方应用可能会滥用这些信息。同时,用户在每个应用中都需要输入账号密码,非常繁琐。 OAuth2.0采用了一种更安全且更便捷的授权方式。首先,用户只需要向授权服务器提供一次账号密码,而不是向每个应用提供。授权服务器会颁发一个授权码给第三方应用,该授权码是一次性的,只能用于获取特定资源。第三方应用通过这个授权码访问受保护的资源,而无需知道用户的账号密码。 另外,OAuth2.0还引入了不同的授权模式,以适应不同应用场景。常见的授权模式包括授权码模式、隐式模式、密码模式和客户端凭证模式等。每种授权模式都有自己的特点和适用场景。 综上所述,OAuth2.0解决了用户在多个应用间共享资源时的安全和便捷性问题。它可以保护用户的账号密码不被第三方应用获取,同时简化了用户登录过程,提高了用户体验。同时,OAuth2.0的广泛应用也促进了应用间的互操作性和数据共享,推动了互联网生态的发展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值