OAuth 是什么?
什么是 OAuth
OAuth Flow(授权码流程)
最近,我需要在工作的一个前端项目中添加单点登录 ( SSO)。我完全不知道 OAuth 是什么。我必须学习一下,于是我就在这里!分享我目前学到的知识 😊
什么是 OAuth
好吧,让我们从基础开始。OAuth 代表开放式身份验证。它是第一个版本,OAuth 1.0旨在处理委托授权问题。想象一下,你需要让某个服务X访问位于服务Y中的部分数据。在 OAuth 出现之前,你必须将服务Y的密码提供给服务X。这很糟糕!你不仅仅是授予他们访问某些数据的权限,你还赋予了他们对你帐户的完全控制权。毫无疑问,我们需要一个更好的方法!✋
这就是OAuth 1.0协议的用武之地,它通过允许服务X在不泄露密码的情况下访问服务Y中的某些数据来解决这个问题。💪
我们先来了解一些术语,以便本文的其余部分更加清晰。它们也是 OAuth 协议中的不同角色。
- 资源所有者:基本上就是你,你拥有资源服务器中的数据
- 客户端:即服务X。换句话说,就是想要访问资源服务器中的资源的应用程序
- 授权服务器:该服务器负责授权对资源的访问。
- 资源服务器:也就是服务Y,换句话说,包含资源的应用程序。
- 资源/范围:请求的资源。可能是一些数据,也可能是执行某些操作的权限。
请注意,授权服务器和资源服务器可以是同一个应用程序,也可以是完全不同的应用程序。
OAuth Flow(授权码流程)
我创建了这个图表来显示整个 OAuth 流程,请快速浏览一下,我们将在图表之后讨论每个步骤。
是不是有点不知所措?可能我不太擅长画图🙄。别担心,我们一步一步来吧。
我们来举个例子。假设你想创建一个Spotify账户,但说实话,你懒得填写所有信息😞。你希望Facebook帮你填写所有信息。所以你点击了那个“使用Facebook注册”的按钮。我们先暂停一下,分析一下。
这里发生了什么?根据 OAuth 术语,谁是谁?
- 资源/范围是您的个人资料信息,即Spotify需要从Facebook获取的数据来为您注册。
- 资源所有者显然是你😒。
- Spotify是客户端应用程序。
- Facebook既充当资源服务器,又充当授权服务器。
稍等!在我们深入研究图表之前,OAuth 依赖于一次性的初始配置步骤。基本上,它是身份验证服务器识别哪个客户端应用正在请求授权的一种方式。身份验证服务器会生成一个客户端 ID和一个客户端密钥,这两个密钥对于该客户端都是唯一的。它们随后会保存在客户端中,用于后续步骤,并且必须保密。
此外,每个客户端都需要指定一个重定向 URL。身份验证服务器会在 OAuth 流程中使用此 URL。
话虽如此,让我们深入研究一下该图表。
- 首先,单击“使用 Facebook 注册”按钮将会把您重定向到来自身份验证服务器的登录页面。
- 此步骤需要两个参数:客户端ID和范围。
- 身份验证服务器使用客户端 ID 来识别哪个客户端正在请求权限。
- 范围用于识别正在请求哪些数据/权限。
- 登录后,身份验证服务器将向用户显示同意屏幕
- 同意屏幕询问资源所有者是否允许客户端访问范围内定义的数据/权限
- 授予权限后,身份验证服务器将引导浏览器到重定向 URL,并在查询参数中传递授权码
- 有了代码,客户端需要用访问令牌交换代码和客户端密钥
- 有了访问令牌,客户端最终可以从资源服务器访问资源
太酷了!但是,为什么我们需要额外的步骤来交换授权码和访问令牌呢?为什么不直接获取访问令牌呢?嗯,这是一种安全措施,可以确保访问令牌不会暴露在重定向 URL 的参数中。
嗯,但是中间人难道不能以某种方式获取授权码,然后抢在客户端之前交换令牌吗?
不行,因为这种交换还需要客户端密钥,而只有客户端应用程序和授权服务器知道这个密钥。
此流程称为授权码流程,还有其他类型。
此外,OAuth 在首次发布后就被滥用了。这就是为什么需要 OAuth 2.0 和 OpenID Connect。我可能会在以后的文章中详细讨论这个问题。😌
如果你喜欢这篇博文,请告诉我。别忘了分享哦!
一如既往,快乐编码 🔥🔥
或者用阿拉伯语......