AUTHN · AUTHZ · 30-DAY ROADMAP · OPEN PLATFORM

三十天精通 认证授权 —— 给 Go 开放平台工程师的路线

从 HTTP Basic 到 OAuth 2.1,从 JWT 到 mTLS,从 RBAC 到 Google Zanzibar。 六个阶段覆盖:基础认证 · 令牌与 JWT · OAuth 2.0 全家桶 · OIDC 与企业身份 · 授权模型 · 开放平台实战。 节奏:每天 45–90 分钟,先读规范 / 论文,后用 Go 实现最小可运行的样例。 原则—— 对着 RFC 读 → 画时序图 → 写 Go 实现 → 复盘攻击面。

TOTAL 30 Days PACE 45–90 min / day PHASES 6 STACK Go · OAuth · OIDC · OPA · Hydra TARGET 设计 & 实现开放平台 IAM

阶段总览

OVERVIEW

图:认证授权 30 天学习路线阶段总览

  • AUTHN / AUTHZ 30-DAY ROADMAP — 6 PHASES
  • PHASE 1
  • 基础认证
  • Day 1 – 5
  • PHASE 2
  • 令牌 / JWT
  • Day 6 – 9
  • PHASE 3 ★
  • OAuth 2.0
  • Day 10 – 16
  • PHASE 4
  • OIDC / SAML
  • Day 17 – 21
  • PHASE 5
  • 授权模型
  • Day 22 – 25
  • PHASE 6 ★
  • 开放平台实战
  • Day 26 – 30
  • KEY CONCEPTS
  • Session / Cookie
  • bcrypt / argon2
  • JWT / JWS
  • OAuth 2.1
  • OIDC
  • RBAC / ABAC
  • mTLS / SPIFFE
  • Open Platform IAM
  • SKILLS ACQUIRED
  • HTTP Auth
  • Crypto
  • JWT
  • SAML
  • Zanzibar
  • OPA / Casbin
  • mTLS
  • API Sign
  • DELIVERABLES
  • 能独立设计三方应用接入流程 · 能审计自家 OAuth Server · 能为微服务挑对的授权模型

六阶段 / 30 天 · 从协议规范到 Go 工程落地 · 终点是 Open Platform IAM

基础认证

DAY 1 – 5

把所有"老话题"一次性补齐。 HTTP Basic / Cookie / Session 是后面所有协议的语义基础; 密码学和 TLS 是所有 token 安全性的物理基础。 跳过这一阶段直接学 OAuth,会看着规范不知道为什么要这么设计。

DAY 01 · 概念入门:AuthN vs AuthZ — Authentication / Authorization / Accounting · HTTP Basic / Digest · Cookie / Session 模型

DAY 02 · 密码学基础 — 哈希 SHA-256 · 密码哈希 bcrypt / argon2 · 对称 / 非对称加密 · HMAC · 数字签名

DAY 03 · PKI 与 TLS / HTTPS — 证书链 · CA · TLS 1.3 握手 · SNI · ALPN · mTLS 入门

DAY 04 · 会话管理与 Web 安全 — Server-side Session · Session Fixation · CSRF · SameSite · XSS · HttpOnly / Secure

DAY 05 · 多因素认证 MFA — TOTP / HOTP (RFC 6238 / 4226) · SMS OTP 的真实风险 · WebAuthn / Passkey · FIDO2

交付物: 用 Go + net/http 写一个支持 Cookie Session 登录 + bcrypt 存密码 + TOTP 二次验证的最小 demo

令牌与 JWT

DAY 6 – 9

JWT 是 OAuth / OIDC 时代的事实载荷格式,但也是事故重灾区。 这一阶段先把 JWS / JWE / JWK / JWA 一族规范理清, 再专门用一天复盘 JWT 的著名漏洞, 最后用 Go 实现带 JWKS 轮换的双 token 登录系统。

DAY 06 · JWT 深入 — JWS / JWE / JWK / JWA 关系 · Header / Payload / Signature · RS256 / HS256 / ES256 · 标准声明 iss / sub / aud / exp / nbf / jti

DAY 07 · JWT 安全攻击 — alg=none 漏洞 · alg 混淆 · Key Confusion · 拒绝列表设计 · JWKS 端点

DAY 08 · JWT 替代方案 — PASETO v3/v4 · Macaroon (带条件的 token) · Biscuit · Branca · 何时该用 / 不该用

DAY 09 · Go 实战:双 Token 登录 — golang-jwt/jwt v5 · Access + Refresh 双 token · JWKS rotation · go-jose 处理 JWS / JWE

关键认知: JWT 不等于"加密"——默认只是签名(JWS);需要保密时用 JWE,但更常见的做法是把敏感数据留在服务端

OAuth 2.0 全家桶 ★ 开放平台核心

DAY 10 – 16

整整一周专门给 OAuth 2.0。 开放平台的"接入第三方应用",本质就是在搭 OAuth Authorization Server。 不只要懂"用哪个流程",更要懂" 为什么是这个流程"—— Implicit Flow 为什么被废、PKCE 解决什么问题、DPoP 又对 Bearer 做了什么补充。

DAY 10 · OAuth 2.0 核心概念 — 四角色 RO / Client / AS / RS · 四种 Grant · Token & Scope · 端点 authorize / token / introspect / revoke

DAY 11 · 授权码流程详解 — Authorization Code Flow 端到端 · state 防 CSRF · redirect_uri 精确匹配 · 时序图练习

DAY 12 · PKCE 与已废弃流程 — PKCE RFC 7636 (code_verifier / code_challenge) · Implicit Flow 为何废弃 · ROPC 为何不该用

DAY 13 · 其他 Grant 流程 — Client Credentials (M2M) · Device Code Flow RFC 8628 (电视/打印机) · Token Exchange RFC 8693

DAY 14 · Token 生命周期管理 — Access vs Refresh Token · Bearer vs Sender-Constrained · Introspection RFC 7662 · Revocation RFC 7009 · JWT Profile RFC 9068

DAY 15 · OAuth 2.1 与 Security BCP — 2.1 的合并与强制要求 · Security BCP 重点变化 · DPoP RFC 9449 · Resource Indicators RFC 8707

DAY 16 · 攻击面与防御清单 — CSRF · Mix-up Attack · Code Injection · Redirect URI Manipulation · AS 安全 checklist

交付物: 用 fosite / hydra 起一个本地 AS,用 oauth2 客户端跑完整 Authorization Code + PKCE,并能解释每个参数为什么需要

OIDC 与企业身份

DAY 17 – 21

OAuth 解决"授权",OIDC 在它之上解决"认证"—— 开放平台里几乎所有"用 X 账号登录"都是这两套协议的组合。 企业客户接入则还要面对 SAML 这套上一个时代的协议,以及 SCIM 这种"用户/组同步"标准。

DAY 17 · OIDC 核心 — ID Token vs Access Token · UserInfo Endpoint · scope openid / profile / email · nonce 防重放

DAY 18 · OIDC Discovery & 动态注册 — .well-known/openid-configuration · JWKS 端点 · Dynamic Client Registration RFC 7591

DAY 19 · OIDC 高级特性 — RP-Initiated Logout · Front / Back-Channel Logout · Session Management · CIBA

DAY 20 · SAML 2.0 与企业 SSO — IdP / SP / Federation · SAML Assertion · 与 OIDC 对比 · Office 365 / 钉钉 / 飞书 接入场景

DAY 21 · SCIM 用户管理 — SCIM 2.0 RFC 7644 · 用户 / 组同步 · 与 OIDC / SAML 配合形成 IAM 闭环

关键区分: OAuth 给应用一张"代客户做事的票",OIDC 在票上再印一行"持票人是谁"——SaaS 登录两者都要

授权模型 (AuthZ)

DAY 22 – 25

认证解决"你是谁",授权解决"你能干什么"。 RBAC 适合管理后台,ABAC 适合复杂规则,ReBAC 适合"文档 / 资源"型权限(典型代表是 Google Docs)。 开放平台一般是组合:scope + RBAC 给 API 接入,资源级权限走 ReBAC。

DAY 22 · RBAC 角色访问控制 — 用户 - 角色 - 权限 三段模型 · 角色层级 · 职责分离 SoD · 静态 vs 动态分配

DAY 23 · ABAC 属性访问控制 — 属性建模 · XACML 架构 · PDP / PEP / PIP / PAP 四件套 · 适用 vs 不适用场景

DAY 24 · ReBAC 与 Google Zanzibar — Zanzibar 论文精读 · Userset Rewrites · SpiceDB / OpenFGA / Permify 选型对比

DAY 25 · 策略引擎实战 — OPA + Rego 入门 · Cedar Policy · Casbin (Go 生态首选) · 与 gRPC / Gin 中间件集成

实战建议: 不要试图"一个模型走天下"——开放平台典型组合是 OAuth scope (粗粒度) + Casbin (RBAC 后台) + OpenFGA (资源级 ReBAC)

开放平台实战 ★ 业务落地

DAY 26 – 30

最后五天,把所有协议落到真实的开放平台场景: 签名验证(API Key + HMAC)、三方应用接入与配额、服务间 mTLS、零信任架构, 最终用 Ory Hydra + Casbin + Go 搭一个能跑的小型 IAM。

DAY 26 · API Key 与签名认证 — API Key 设计 · AWS SigV4 / 阿里云 / 飞书签名算法 · Webhook HMAC 验签 · 时间窗口防重放

DAY 27 · 三方应用接入与 Marketplace — 应用注册流程 · Client Credentials 申请审核 · Scope 治理 · 配额与限流 · 租户隔离

DAY 28 · 服务间认证 — mTLS 自签证书 · SPIFFE / SPIRE 身份框架 · Istio / Linkerd Service Mesh 认证模型

DAY 29 · 零信任架构 — BeyondCorp 论文 · ZTNA · Identity-Aware Proxy · 设备身份 · 持续验证 (Continuous Verification)

DAY 30 · 综合实战:搭一个迷你开放平台 — Ory Hydra (OAuth2 Server) + Kratos (Identity) + Casbin (RBAC) + Go API + 一个三方应用 demo 全链路打通

终极目标: 别人提"如何接我们的开放平台"时,你能画清楚 SDK 申请 → OAuth 授权 → API 调用 → Webhook 回推 的全流程,并解释每一步的安全考虑

规范 / RFC 速查

REFERENCE

这一行是这套路线最重要的资料。 认证授权领域所有"博客知识"最终都要回到这几篇规范才有定论。 建议每天学习的最后 15 分钟,对着 RFC 看一遍今天的主题。

编号规范说明对应阶段
RFC 7617HTTP Basic Auth最简单的 HTTP 认证方案,base64(user:pass)P1 · Day 1
RFC 6238TOTP 时间型一次性密码Google Authenticator / Authy 的核心算法P1 · Day 5
WebAuthn L3W3C WebAuthn / Passkey无密码认证的事实标准,基于公私钥P1 · Day 5
RFC 7519JSON Web Token (JWT)Token 的载荷格式定义P2 · Day 6
RFC 7515JSON Web Signature (JWS)JWT 默认形态——只签名不加密P2 · Day 6
RFC 7516JSON Web Encryption (JWE)需要保密的 JWT 用这个P2 · Day 6
RFC 7517JSON Web Key (JWK / JWKS)公钥分发的标准格式P4 · Day 18
RFC 6749OAuth 2.0 核心开放平台的"宪法"——必须通读P3 · Day 10
RFC 6750Bearer Token 使用Authorization: Bearer xxx 的来源P3 · Day 14
RFC 7636PKCE移动 / SPA 场景的必备加固P3 · Day 12
RFC 7662Token Introspection资源服务器在线验证 tokenP3 · Day 14
RFC 7009Token Revocation主动吊销 token 的标准端点P3 · Day 14
RFC 8252OAuth for Native Apps移动 / 桌面 App 的 OAuth 最佳实践P3 · Day 12
RFC 8628Device Code Flow电视 / 打印机 / CLI 的 OAuthP3 · Day 13
RFC 8693Token Exchange跨域 token 换发,零信任常用P3 · Day 13
RFC 9068JWT Profile for Access Tokens把 Access Token 标准化为 JWT 的规范P3 · Day 14
RFC 9449DPoPSender-Constrained Token,解决 Bearer 被偷的问题P3 · Day 15
RFC 6819OAuth Threat ModelOAuth 安全模型,Day 16 必读P3 · Day 16
OIDC Core 1.0OpenID Connect CoreOAuth 之上的认证层P4 · Day 17
RFC 7591Dynamic Client RegistrationOIDC 客户端动态注册P4 · Day 18
SAML 2.0OASIS SAML Core企业 SSO 的老牌协议P4 · Day 20
RFC 7644SCIM 2.0跨系统的用户 / 组同步标准P4 · Day 21

核心概念对照表

12 CONCEPTS

概念含义使用场景阶段
AuthN vs AuthZ认证 = 你是谁;授权 = 你能做什么任何登录系统的设计第一步:分清这两件事P1 · Day 1
Session vs Token状态在服务端 (Session) 还是在客户端 (JWT)选型决定吊销 / 扩展性 / 安全性的取舍P1-P2 · Day 4 / 6
OAuth 2.0 vs OIDCOAuth 授权(拿 Access Token),OIDC 认证(拿 ID Token)“用 X 登录” = OIDC;“调 X 的 API” = OAuthP3-P4 · Day 10 / 17
Access vs Refresh Token短命的资源凭证 vs 长命的换发凭证权衡安全性与用户体验的核心机制P3 · Day 14
Authorization Code vs ImplicitCode Flow 走后端换 token;Implicit 直接给前端 token (已废弃)新项目一律用 Code + PKCEP3 · Day 11 / 12
Bearer vs DPoPBearer “凭票即用”;DPoP 把 token 绑定到客户端密钥高安全场景 / 公开客户端用 DPoPP3 · Day 15
OIDC vs SAMLOIDC JSON + REST,年轻;SAML XML,企业老协议面向 C 端用 OIDC;面向大企业 IT 部门可能要 SAMLP4 · Day 17 / 20
RBAC vs ABAC vs ReBAC角色 / 属性 / 关系 三种授权建模思路后台管理 → RBAC;规则复杂 → ABAC;资源型 → ReBACP5 · Day 22-24
PDP / PEP / PIP策略决策点 / 执行点 / 信息点(XACML 架构)策略引擎部署架构的标准术语P5 · Day 23
API Key 签名 vs OAuth签名认证用对称密钥 + HMAC,OAuth 走 token 体系云厂商 OpenAPI 多用签名;SaaS 多用 OAuthP6 · Day 26
mTLS vs BearermTLS 在传输层互验证书;Bearer 在应用层带 token服务间通信首选 mTLS;公网 API 用 BearerP6 · Day 28
SSO vs FederationSSO 是"一次登录处处用",Federation 是"跨域信任建立"SSO 多用 OIDC / SAML;Federation 多用 OIDC + IdPP4 · Day 20

学习资源

RESOURCES

经典论文与规范

MUST READ

OAuth 2.0 Security BCP

draft-ietf-oauth-security-topics——OAuth 安全的现代版"圣经",比 RFC 6819 更新。Day 15 / Day 16 必读。

MUST READ

Google Zanzibar 论文

“Consistent, Global Authorization System”——ReBAC 的祖师爷论文,现代权限系统(SpiceDB / OpenFGA)都是它的实现。Day 24 精读。

PAPER

BeyondCorp 系列

Google 零信任架构 6 篇论文,从理念到落地。Day 29 的核心参考。

SPEC

OAuth / OIDC Spec 全集

oauth.net/2/ 与 openid.net/specs/ 是规范权威入口,配合 RFC 速查表使用。

推荐书籍

  1. OAuth 2 in Action — Justin Richer / Antonio Sanso · OAuth 入门最系统的书,Manning 出版
  2. API Security in Action — Neil Madden · 后端 API 安全的全景图,覆盖 OAuth / JWT / mTLS / 容量限制
  3. Solving Identity Management in Modern Applications — Yvonne Wilson · 偏企业 IAM 视角,SAML / OIDC / SCIM 都讲
  4. Zero Trust Networks — Evan Gilman / Doug Barth · 零信任架构的实操指南
  5. 白帽子讲 Web 安全 — 吴翰清 · 国内 Web 安全入门经典,Phase 1 的中文补充读物

Go 生态选型

OAUTH SERVER

ory/hydra

Go 写的 OAuth 2.0 / OIDC 服务器,CNCF 项目,生产可用。Day 30 实战核心组件。

IDENTITY

ory/kratos

用户管理 / 注册 / 登录 / MFA 一站式后端,搭配 Hydra 形成完整 IAM。

AUTHZ

casbin/casbin

Go 最流行的访问控制库,支持 RBAC / ABAC / RESTful,配置即模型。

REBAC

openfga / spicedb

Zanzibar 的开源实现,资源级权限的现代选择。

JWT

golang-jwt/jwt v5

Go 最常用的 JWT 库;JWS / JWE 用 go-jose/go-jose 更完整。

OAUTH CLIENT

golang.org/x/oauth2

官方 OAuth 2.0 客户端实现,对接 GitHub / Google / 飞书等开放平台标配。

OIDC

coreos/go-oidc

Go 里最成熟的 OIDC RP 实现,ID Token 验证 / Discovery 一把梭。

POLICY

open-policy-agent/opa

通用策略引擎,Rego 语言写策略,K8s 准入控制 / 微服务授权都用它。

WORKLOAD ID

spiffe / spire

服务身份框架,Service Mesh 与零信任的基础设施。

参考开放平台(拆解学习)

飞书 Open Platform钉钉开放平台企业微信GitHub AppsSlack APIStripe ConnectNotion APIAWS IAM / Cognito

学习方法: 选 1-2 个平台精读其"应用开发者文档",特别看授权流程、scope 设计、签名机制——这是别人花几年沉淀的答案

Go 代码骨架速查

SNIPPETS

JWT 签发与校验(Day 9)

// go get github.com/golang-jwt/jwt/v5 claims := jwt.MapClaims{   “sub”: userID,   “aud”: “openapi.example.com”,   “exp”: time.Now().Add(15 * time.Minute).Unix(),   “iat”: time.Now().Unix(), } token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims) signed, _ := token.SignedString(privateKey)

// 校验时一定要 explicit 指定算法,避免 alg 混淆攻击 parsed, err := jwt.Parse(signed, func(t *jwt.Token) (any, error) {   if t.Method != jwt.SigningMethodRS256 {     return nil, errors.New(“unexpected alg”)   }   return publicKey, nil })

OAuth 2.0 客户端(Day 11)

// go get golang.org/x/oauth2 cfg := &oauth2.Config{   ClientID: os.Getenv(“CLIENT_ID”),   ClientSecret: os.Getenv(“CLIENT_SECRET”),   RedirectURL: “https://app.example.com/callback",   Scopes: []string{“openid”, “contact:read”},   Endpoint: myplatform.Endpoint, }

// 1) 生成 state + PKCE,跳到授权页 state := randomString(32) verifier := oauth2.GenerateVerifier() url := cfg.AuthCodeURL(state, oauth2.S256ChallengeOption(verifier))

// 2) 回调里换 token tok, err := cfg.Exchange(ctx, code, oauth2.VerifierOption(verifier))

Casbin RBAC 授权(Day 25)

// go get github.com/casbin/casbin/v2 e, _ := casbin.NewEnforcer(“model.conf”, “policy.csv”)

// 中间件里检查权限 ok, _ := e.Enforce(userID, “/api/v1/contacts”, “GET”) if !ok {   c.AbortWithStatus(http.StatusForbidden)   return }

HMAC 签名验证(Day 26)

// 验证开放平台 Webhook 签名 mac := hmac.New(sha256.New, []byte(appSecret)) mac.Write([]byte(timestamp + “\n” + nonce + “\n” + string(body))) expected := hex.EncodeToString(mac.Sum(nil))

if !hmac.Equal([]byte(expected), []byte(receivedSig)) {   return errors.New(“invalid signature”) } // 务必检查 timestamp 在 ±5 分钟内,防重放

学习方法建议

5 PRINCIPLES

01

跟 RFC 走

OAuth / OIDC 的中文博客质量参差不齐,很多结论已过时(比如还在推 Implicit Flow)。每天最后 15 分钟对着 RFC 复核一遍今天的主题。

02

画时序图说服自己

每个流程都用 Mermaid / Excalidraw 画一遍时序图。搞清楚每条消息里” 谁 把 什么 发给 谁 、 为什么 需要它",比读十篇博客有效。

03

同时学攻击面

学每个机制时同步学它的攻击方式:JWT 学 alg 混淆,OAuth 学 Mix-up,Cookie 学 CSRF。安全感来自理解威胁模型,不来自"听说安全"。

04

自己实现一遍

读完规范一定要写 Go 代码。最小 OAuth Server + 最小 Client 走完整 Code Flow,能学到所有文章都没讲的细节。

05

关注废弃与演进

Implicit Flow / ROPC / SMS OTP / 自签 JWT 加密——这些"还活着但不该用"的,要知道 为什么被废弃 、 替代方案是什么 。这是高级工程师的判断力来源。

“好的认证授权系统,让用户感觉不到它的存在,让攻击者感觉无从下手。”

AUTHENTICATION · AUTHORIZATION · 30-DAY ROADMAP · GO BACKEND · OPEN PLATFORM