认证与授权
认证(Authentication)与授权(Authorization)是现代应用系统的核心安全机制。本教程系统讲解从传统 Session-Cookie 到现代 JWT、OAuth 2.0、OpenID Connect 的完整知识体系,帮助你构建安全可靠的身份管理系统。
什么是认证与授权?
认证(Authentication)
认证是验证用户身份的过程,回答"你是谁?"的问题。常见方式包括:
- 用户名/密码验证
- 手机验证码
- 第三方登录(微信、GitHub、Google 等)
- 双因素认证(2FA)
- 生物识别(指纹、人脸)
授权(Authorization)
授权是决定用户可以访问哪些资源的过程,回答"你能做什么?"的问题。常见模型包括:
- RBAC:基于角色的访问控制(Role-Based Access Control)
- ABAC:基于属性的访问控制(Attribute-Based Access Control)
- ACL:访问控制列表(Access Control List)
认证方式演进
┌─────────────────────────────────────────────────────────────────┐
│ 认证方式演进 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Session-Cookie ──► JWT/Token ──► OAuth/OIDC │
│ (传统单体应用) (无状态认证) (第三方授权) │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 服务器 │ │ 无状态 │ │ 第三方 │ │
│ │ 存会话 │ │ 自包含 │ │ 身份提供 │ │
│ │ 状态 │ │ 令牌 │ │ 商(IdP) │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
学习路径
第一阶段:基础概念
- Session-Cookie 认证 - 理解传统的有状态认证机制
- JWT 认证 - JSON Web Token 的原理与实践
第二阶段:第三方授权
- OAuth 2.0 - 授权框架的核心流程
- OpenID Connect - 基于 OAuth 的身份认证层
参考资料
- 速查表 - 常用认证授权命令和代码快速参考
应用场景对比
| 场景 | 推荐方案 | 说明 |
|---|---|---|
| 单体 Web 应用 | Session-Cookie | 简单可靠,服务器控制会话 |
| 分布式/微服务 | JWT | 无状态,易于水平扩展 |
| 第三方登录 | OAuth 2.0 + OIDC | 标准协议,生态完善 |
| 企业内网 | SSO + LDAP/AD | 统一身份管理 |
| 移动端 APP | JWT + Refresh Token | 适合无 Cookie 环境 |
| API 开放平台 | OAuth 2.0 | 安全的第三方授权 |
安全最佳实践
- HTTPS 传输 - 所有认证流程必须使用 HTTPS
- 密码安全 - 使用 bcrypt/Argon2 等慢哈希算法
- Token 安全 - 设置合理的过期时间,使用 HttpOnly Cookie
- CSRF 防护 - Session 认证需要防范跨站请求伪造
- Rate Limiting - 登录接口需要限流防暴力破解
- 审计日志 - 记录所有认证授权事件
技术栈推荐
后端实现
- Java: Spring Security, Sa-Token
- Node.js: Passport.js, jsonwebtoken
- Python: FastAPI OAuth2, PyJWT
- Go: golang-jwt, casbin
身份提供商 (IdP)
- 开源: Keycloak, Authelia, Casdoor
- 云服务: Auth0, AWS Cognito, Firebase Auth
- 企业: Okta, Azure AD, Ping Identity
开始你的认证与授权学习之旅吧!