第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_token随access_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依赖漏洞(如safety,npm 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)
评论
请登录后发表评论
暂无评论,快来发表第一条评论吧!