第6阶段:系统安全与认证

目标

掌握现代 Web 应用和分布式系统中的身份认证、授权、攻击防御机制,能够设计安全的认证体系。

模块概览

模块 核心内容 与已学知识衔接
6.1 认证与授权核心概念 Authentication vs Authorization, 凭证管理, 会话生命周期 复习 Session/JWT,扩展到 SSO
6.2 OAuth 2.0 协议 四种授权模式,令牌类型,授权码流程 对比 JWT 自包含与 OAuth 令牌的引用
6.3 OpenID Connect (OIDC) 在 OAuth 2.0 上加身份层,ID Token,UserInfo Endpoint 结合 JWT 讲解 ID Token 格式
6.4 单点登录 (SSO) CAS, SAML, OIDC 实现 SSO,统一登出 展示多应用共享认证状态
6.5 访问控制模型 RBAC, ABAC, ReBAC (Google Zanzibar) 关联数据库中的用户角色设计
6.6 常见安全攻击与防御 XSS, CSRF, SQL注入, 重放攻击, DDoS, 中间人 结合 HTTPS, Cookie flag, ORM 等已有知识
6.7 安全实践与工具 密码哈希 (bcrypt), 速率限制, WAF, 安全头部 (CSP, HSTS) 补充生产级加固措施

各模块详细学习要点

6.1 认证与授权核心概念

  • 认证 (Authentication):验证身份(你是谁)。常见方式:密码、多因素、生物识别。
  • 授权 (Authorization):决定权限(你能做什么)。通常基于角色/策略。
  • 凭证管理:密码存储(绝对不要明文!使用 bcrypt/scrypt/argon2)、定期轮换。
  • 会话管理:基于 Session(有状态)vs 基于 Token(无状态),各自的适用场景与安全风险。

6.2 OAuth 2.0

  • 角色:资源所有者(用户)、客户端(第三方应用)、授权服务器、资源服务器。
  • 授权模式
  • 授权码模式(Authorization Code):最安全,用于有后端的 Web 应用。
  • PKCE 增强版:用于移动/单页应用。
  • 客户端凭证模式:服务器对服务器。
  • 设备授权模式:输入受限设备。
  • 令牌:Access Token(短期)、Refresh Token(长期,可用来换新令牌)。
  • 与 JWT 的关系:Access Token 可以是 JWT 格式,也可以是随机字符串(由授权服务器内省)。

6.3 OpenID Connect (OIDC)

  • 为什么需要:OAuth 2.0 只授权不认证,OIDC 在 OAuth 2.0 之上提供身份认证。
  • 核心产物
  • ID Token(总是 JWT):包含用户身份信息(sub, email, iss 等)。
  • UserInfo Endpoint:获取额外用户信息。
  • 流程:在授权码基础上,id_tokenaccess_token 一起返回。

6.4 单点登录 (SSO)

  • 模式:多个应用共享一个身份认证中心。
  • 实现方案
  • 基于 SAML 2.0:传统企业,基于 XML。
  • 基于 OIDC:现代趋势,例如 Auth0, Keycloak, Okta。
  • 基于 CAS:耶鲁大学开发,较老。
  • 关键组件:认证中心(IdP)、服务提供商(SP)。
  • 跨域 SSO:通过主域 Cookie 或 iframe 与 postMessage 实现。

6.5 访问控制模型

  • RBAC (Role-Based):用户 → 角色 → 权限。适合组织层级清晰的系统。
  • ABAC (Attribute-Based):通过用户属性、资源属性、环境条件动态评估。使用 XACML 或 OPA。
  • ReBAC (Relationship-Based):例如“用户对文档有编辑权限因为他是该文档的创建者”。Google Zanzibar 是典型实现。
  • 实践:在数据库中设计 users, roles, permissions, user_roles, role_permissions 表。

6.6 常见安全攻击与防御(精要)

攻击 防御措施(结合已学)
XSS 输出转义(模板自动转义),CSP 头部,Cookie 设置 HttpOnly; Secure
CSRF CSRF Token(表单隐藏域或 Header),SameSite Cookie(Lax/Strict),双重提交 Cookie
SQL 注入 ORM 参数化查询(已学),输入校验,最小化数据库账户权限
中间人 HSTS 强制 HTTPS,证书固定(Pinning,谨慎使用)
重放攻击 时间戳 + Nonce + 签名(例如 API 签名机制)
凭证填充 速率限制,验证码,多因素认证
DDoS CDN 加速,WAF(如 Cloudflare),负载均衡器限流,自动扩缩容

6.7 安全实践与工具

  • 密码哈希:使用 bcrypt (Python: bcrypt 库),每次生成不同盐。
  • 速率限制:Flask-Limiter,或 Nginx limit_req_zone
  • 安全头部X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Content-Security-Policy, Referrer-Policy
  • WAF(Web应用防火墙):ModSecurity, AWS WAF。
  • 依赖扫描:定期检查 pip / npm 依赖漏洞(如 safetynpm audit)。

第6阶段实践项目建议

构建一个迷你统一认证中心
- 两个模拟应用(App1.local, App2.local)和一个认证中心(sso.local)。
- 实现 OIDC 授权码流程(使用 oauthlib + pyjwt 或直接使用 Authlib)。
- 用户登录后,两个 App 均无需再次登录(SSO)。
- 在 App1 中实现 RBAC:管理员可访问 /admin,普通用户访问 /profile 但不可访问 admin。
- 配置安全头部和 HTTPS(自签名证书即可)。
- 编写一个 XSS 演示页面并修复它。

推荐工具
- Python Flask / FastAPI 实现 OIDC Provider(参考 Authlib 官方示例)。
- 使用 ngrok 或修改 hosts 模拟多个域名。
- 使用 docker-compose 运行 Redis 做 Session 存储(可选)。


后续阶段预告(第7阶段及以后)

完成第6阶段后,可以继续:
- 第7阶段:分布式系统基石(CAP、BASE、分布式事务、一致性哈希)
- 第8阶段:可观测性与 DevOps(日志、指标、追踪、CI/CD、K8s)
- 第9阶段:大数据与流处理(Spark、Flink、Kafka Streams)
- 第10阶段:现代通信协议(gRPC、GraphQL、WebSocket)