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
C ·

阶段总览

OVERVIEW
AUTHN / AUTHZ 30-DAY ROADMAP — 6 PHASESPHASE 1基础认证Day 1 – 5PHASE 2令牌 / JWTDay 6 – 9PHASE 3 ★OAuth 2.0Day 10 – 16PHASE 4OIDC / SAMLDay 17 – 21PHASE 5授权模型Day 22 – 25PHASE 6 ★开放平台实战Day 26 – 30KEY CONCEPTSSession / Cookiebcrypt / argon2JWT / JWSOAuth 2.1OIDCRBAC / ABACmTLS / SPIFFEOpen Platform IAMSKILLS ACQUIREDHTTP AuthCryptoJWTOAuth 2.0OIDCSAMLRBAC / ABACZanzibarOPA / CasbinmTLSAPI SignDELIVERABLES能独立设计三方应用接入流程 · 能审计自家 OAuth Server · 能为微服务挑对的授权模型
六阶段 / 30 天 · 从协议规范到 Go 工程落地 · 终点是 Open Platform IAM
P1 ·

基础认证

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
P2 ·

令牌与 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,但更常见的做法是把敏感数据留在服务端
P3 ·

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,并能解释每个参数为什么需要
P4 ·

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 登录两者都要
P5 ·

授权模型 (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)
P6 ·

开放平台实战 ★ 业务落地

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 回推 的全流程,并解释每一步的安全考虑
R ·

规范 / 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
K ·

核心概念对照表

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
L ·

学习资源

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 Apps Slack API Stripe Connect Notion API AWS IAM / Cognito
学习方法: 选 1-2 个平台精读其"应用开发者文档",特别看授权流程、scope 设计、签名机制——这是别人花几年沉淀的答案
G ·

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