OAuth 的工作原理——授权码流程 · 思维导图

OAuth 的工作原理——授权码流程. 可编辑的思维导图,以彩色分支、子主题和曲线连接呈现想法。 曲线表示联系;只有方向重要时才使用箭头。

OAuth 让一个应用代表用户去访问另一个服务的数据,全程不接触用户的密码——它用用户的同意换来一个短期令牌。

OAuth 的工作原理——授权码流程 · 思维导图

The interactive MindMap canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.

如何阅读这张思维导图

  • 从中心主题开始,沿着彩色分支探索相关想法。
  • 曲线表示联系;只有方向重要时才使用箭头。

User consent

这一分支汇集 “User clicks “Sign in with provider””, “The consent screen is the step most real flows hide: the user chooses exactly which permissions the app may use, such as “read profile” but not “post”.”.

Redirect & code

这一分支汇集 “The redirect carries the client id, the requested scopes and a redirect URI. The user never hands their password to the client application.”, “Authorization server returns an authorization code to the client”.

Token exchange

这一分支汇集 “The code is short-lived and useless by itself. The exchange proves the client is who it claims to be by presenting its registered client secret.”, “Authorization server issues the access token”.

Resource access

这一分支汇集 “Access tokens expire after a short window. Long-lived sessions use a separate refresh token that can mint new access tokens without asking the user again.”, “Resource server validates the token and returns the user's data”, “User sees their data inside the app”.

跨分支联系

用户的密码只交给授权服务器——客户端和资源服务器从不经手。

同意(也就是权限范围)才是真正的授予;访问令牌是这份授予的机器可读形式。

授权码有效期很短,没有客户端密钥就毫无用处——两个因素共同保护这次交换。

访问令牌会过期;刷新令牌在后台悄悄换出新的令牌,不必再弹一次授权同意页面。

资源服务器唯一的职责就是校验令牌,这让各方保持解耦。

Key relationships and takeaways

  • 用户的密码只交给授权服务器——客户端和资源服务器从不经手。
  • 同意(也就是权限范围)才是真正的授予;访问令牌是这份授予的机器可读形式。
  • 授权码有效期很短,没有客户端密钥就毫无用处——两个因素共同保护这次交换。
  • 访问令牌会过期;刷新令牌在后台悄悄换出新的令牌,不必再弹一次授权同意页面。
  • 资源服务器唯一的职责就是校验令牌,这让各方保持解耦。

When to use this visual

  • 向产品团队解释“使用 Google 登录”为什么是安全的,以及授权同意页面到底在问什么。
  • 选择 OAuth 流程:这里的授权码流程,与隐式流程、客户端凭据流程各自适用的场景。
  • 审计在你的集成里,用户凭据和令牌究竟流经了哪些地方。

运作方式

  1. 调整中心主题

    根据项目或课程修改中心主题的名称。

  2. 扩展分支

    编辑想法并添加示例或注释。

  3. 连接相关想法

    绘制跨分支连接;只有方向重要时才使用箭头。

常见问题

OAuth 是什么,它为什么存在?

OAuth 是一套委托标准。它让一个应用代表用户去访问另一个服务上的数据,而这个应用自始至终看不到用户的密码。用户在授权服务器上认证一次,并批准具体的权限范围;应用拿到一个可以花出去的令牌。图中的四个泳道分组表示的正是这种关注点分离。

授权码和访问令牌有什么区别?

授权码是用户同意之后客户端拿到的一个短期中间值,它本身什么都不授予。客户端要用这个授权码——连同已注册的客户端密钥——去换访问令牌,后者才是调用资源服务器时真正使用的能力。正是这两步式的交换,让客户端得以在令牌端点证明自己的身份。

为什么用户不把密码直接给应用?

因为应用只需要有限的、可吊销的访问权——读取一份资料,而不是拥有一个账号。如果应用拿到了密码,它就永远拥有全部权限,用户也没法只吊销某一个应用而不去到处改密码。OAuth 用密码换来一个有权限范围、会过期、可以单独吊销的令牌。

权限范围(scope)是什么?

权限范围是用户授予的具体权限,比如“读取邮件”或“写入日历”。它们出现在授权同意页面上,并被编码进访问令牌。资源服务器负责强制执行这些范围,因此一个只有读权限的令牌无法写入——最小权限是写进协议里的,而不是指望客户端自觉。

在 QueryChart 中编辑此思维导图

在可编辑画布中打开思维导图。移动想法、添加分支并绘制连接。

在 QueryChart 中编辑此思维导图

思维导图中的更多内容