Authorization Code Flow 是什么

一句话总结

Authorization Code Flow 是 OIDC/OAuth 2.0 里最安全的登录流程。用户点开应用 → 跳转 IDP → 输入密码 → 浏览器拿回一个”临时授权码”→ 后端用这个码去换真正的令牌。多这一步”换码”,就是为了令牌不经过浏览器(防泄露)。


🤔 为什么会有它 / 解决了什么问题

OAuth 早期有个 Implicit Flow:用户登录完,令牌直接通过 URL 传回浏览器。这有两个风险:

  1. 令牌出现在浏览器历史记录、服务器日志、Referer 头里,到处泄露
  2. 恶意 JavaScript 可能截获 URL 里的令牌

Authorization Code Flow 的设计就是令牌永远不出现在浏览器 URL 里。用户只拿到一个临时的、一次性授权码,真正的令牌由后端服务器之间交换。


🔍 具体原理 / 运作逻辑

流程分三步,像寄快递:

第一步:你去 SP(打开 Grafana)
  SP → 浏览器重定向到 Frappe 登录页
  附带参数:client_id, redirect_uri, scope=openid, response_type=code

第二步:你在 IDP 登录(输入密码)
  Frappe 验证密码 → 浏览器重定向回 Grafana
  URL 里带了一个 ?code=xxx(临时授权码,只能用一次,几分钟过期)

第三步:SP 后端用码换令牌(用户看不到)
  Grafana 后端 → POST Frappe 的 /token 接口
  附带:code + client_secret + redirect_uri
  Frappe 验证一切正确 → 返回 Access Token + ID Token
  Grafana 读 ID Token 知道你是谁 → 放行

🧭 什么情况下会用到 / 什么场景会遇到它

  • 配置任何支持 OIDC 的应用(Grafana、Outline、n8n)都是在配这个流程
  • 你登录一个网站后被跳转到 Google 登录页,回来后就登上了——这就是 Auth Code Flow

🔗 关联 / 经常一起出现的概念

  • OIDC:Auth Code Flow 是 OIDC 的推荐认证流程
  • OAuth 2.0:这个流程是 OAuth 2.0 定义的
  • PKCE:Auth Code Flow 的安全升级版
  • ID Token:第三步拿到的”身份证”
  • Access Token:第三步拿到的”房卡”

⚠️ 注意事项 / 常见误区

  • redirect_uri 必须精确匹配 OAuth Client 里配的值(包括 http vs https),否则 IDP 会拒绝
  • code 只能用一次,重放会报错

📎 记忆锚点

你去银行取钱:出示身份证(登录)→ 柜员给你一个号牌(临时授权码)→ 你凭号牌去保险柜取钱(换令牌)。号牌本身不值钱,丢了别人也取不走你的钱。


📝 更新日志

日期改动原因
2026-07-09首次创建Frappe SSO/OIDC 集成准备