一个最简单的登录界面,图中黄色高亮部分,就是 OAuth 登录的典型代表。比如:
- 使用 Google 登录
- 使用 GitHub 登录
- 使用 Twitter 登录
- …
什么是 OAuth 2.0
OAuth 2.0是一个授权框架,它定义了第三方应用如何在不要求用户提供安全细节(用户名、密码等)的情况下安全地获得对服务的访问。OAuth 2.0 的一个常见例子是当你使用 “用 Google 登录” 登录其他网站。
OAuth 2.0 工作流程
一般来说,OAuth 2.0的流程是这样的:
我们以 “用 Google 登录” 为例。
Albert 是 Google 日历的用户,他正试图使用 Calendly.com 来帮助管理他的日历。我们将在下一个例子中介绍这些术语。
- Calendly.com 想要访问 Albert 的 Google 日历。Calendly.com 将 Albert 重定向到他的 Google 账户,在那里他授予 Calendly.com 的日历权限。
- Google 返回一个授权许可,并将 Albert 重定向到 Calendly.com。
- Calendly.com 将授权许可给 Google,
- Calendly.com 收到来自 Google 日历的访问令牌(Access Token)。
- Calendly.com 现在可以使用这个访问令牌
- 获取 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 回到房间,用钥匙进入房间。
Candy 是客户(就像 Calendly.com 一样),想要访问 Alberta 的数据。Alberta 在这里是授予客户有限的访问权。Authorization Grant 是 Alberta 的身份证复印件和她的纸条。
前台接待员就是授权服务器,他们可以为 Candy 生成一个房间钥匙,让她进入房间。这个房间钥匙相当于 Access Token,它可以用来获取资源。
房间锁就是资源服务器,它存放着 Candy 想要的资源:房间。
OAuth 2.0 提供了几种不同的流程,这个例子是按照授权码流程来做的。