image.png

一个最简单的登录界面,图中黄色高亮部分,就是 OAuth 登录的典型代表。比如:

  • 使用 Google 登录
  • 使用 GitHub 登录
  • 使用 Twitter 登录

什么是 OAuth 2.0

OAuth 2.0是一个授权框架,它定义了第三方应用如何在不要求用户提供安全细节(用户名、密码等)的情况下安全地获得对服务的访问。OAuth 2.0 的一个常见例子是当你使用 “用 Google 登录” 登录其他网站。

OAuth 2.0 工作流程

一般来说,OAuth 2.0的流程是这样的:

image.png
我们以 “用 Google 登录” 为例。

Albert 是 Google 日历的用户,他正试图使用 Calendly.com 来帮助管理他的日历。我们将在下一个例子中介绍这些术语。

  1. Calendly.com 想要访问 Albert 的 Google 日历。Calendly.com 将 Albert 重定向到他的 Google 账户,在那里他授予 Calendly.com 的日历权限。
  2. Google 返回一个授权许可,并将 Albert 重定向到 Calendly.com。
  3. Calendly.com 将授权许可给 Google,
  4. Calendly.com 收到来自 Google 日历的访问令牌(Access Token)。
  5. Calendly.com 现在可以使用这个访问令牌
  6. 获取 Albert 的 Google 日历,但不能访问他的 Google Drive 或其他资源。

在这里,Calendly.com 是客户端(Client),Albert 是资源所有者(Resource Owner),Google 账户是授权服务器(Authorization Server),Google 日历是资源服务器(Resource Server)。

再举个例子 🌰

让我们以 Alberta 为例,她住在一家酒店,想让她的保姆 Candy 进入她的房间。

  • Alberta 同意 Candy 进入她的房间,并要求 Candy 从前台领取自己的房间钥匙。Alberta 给了 Candy 一份身份证复印件和一张写着 “仅限白天进入” 的纸条。

  • Candy 带着 Alberta 的身份证复印件和纸条去找接待员。接待员核对了她的身份证,并给了 Candy 一把只能在白天使用的特殊房间钥匙。Candy 回到房间,用钥匙进入房间。

image.png

  • Candy 是客户(就像 Calendly.com 一样),想要访问 Alberta 的数据。Alberta 在这里是授予客户有限的访问权。Authorization Grant 是 Alberta 的身份证复印件和她的纸条。

  • 前台接待员就是授权服务器,他们可以为 Candy 生成一个房间钥匙,让她进入房间。这个房间钥匙相当于 Access Token,它可以用来获取资源。

  • 房间锁就是资源服务器,它存放着 Candy 想要的资源:房间。

OAuth 2.0 提供了几种不同的流程,这个例子是按照授权码流程来做的。