《安全接口设计核心要点》
第3章 身份认证基础
3、身份认证基础:认证与授权区别、常见认证方式
📌 认证 vs 授权:核心区别
💡 一句话总结:认证是“证明你是谁”,授权是“允许你做什么”。先认证,后授权,缺一不可。
🔐 常见认证方式详解
1️⃣ Basic Auth(基本认证)
- 原理:将
用户名:密码用 Base64 编码后放入 HTTP 请求头Authorization: Basic <编码字符串> - 特点:实现简单,所有浏览器和客户端原生支持
- 安全风险:Base64 不是加密,可轻易解码;密码明文传输
- 使用条件:必须搭配 HTTPS,否则密码完全暴露
- 适用场景:内部工具、快速原型、低安全要求的 API
# 请求示例
GET /api/user/profile HTTP/1.1
Host: example.com
Authorization: Basic YWRtaW46cGFzc3dvcmQxMjM=
# 解码后内容:admin:password123
2️⃣ Digest Auth(摘要认证)
- 原理:服务器发送随机数(nonce),客户端用 MD5 对
用户名:realm:密码:nonce进行哈希,返回摘要 - 特点:密码不在网络中明文传输,使用挑战-响应机制
- 安全增强:支持防重放攻击(通过 nonce 和计数器)
- 局限性:仍依赖 MD5(已不再安全),无法防止中间人攻击(MITM)
- 适用场景:遗留系统、无法使用 HTTPS 的受限环境
# 服务器返回 401 并携带 nonce
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="api@example.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41"
# 客户端响应
Authorization: Digest username="admin", realm="api@example.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/api/user/profile", response="7cff0b4f6962e9e6f7e8a1c3d4e5f6a7", opaque="5ccc069c403ebaf9f0171e9517f40e41"
📊 认证方式对比总结
📖 安全设计建议:对于生产环境,强烈推荐使用 Token 认证(如 JWT),配合 HTTPS 传输。Basic Auth 仅用于开发测试或内部低安全网络。Digest Auth 虽比 Basic 安全,但 MD5 已不再安全,建议逐步迁移至 Token 方案。
专注课程资料整理