知识卡片
三层认证模型与HTTP认证方案的安全递进
内容
“你是谁”这个认证问题可以发生在通信的三个不同层面:通信信道认证(建立 连接前先证明身份,典型是基于SSL/TLS的信道认证)、通信协议认证(获取 资源前先证明身份,典型是HTTP协议内置的认证框架)、通信内容认证(使用 服务前先证明身份,典型是Web表单认证)。HTTP认证框架的设计精髓是把”要 产生身份凭证”这个目的和”具体如何产生凭证”的实现分离开:服务端用401 状态码加WWW-Authenticate响应头告知客户端该用哪种认证方案,客户端把 凭证塞进Authorization请求头回传,具体用指纹、密码还是数字证书生成凭证 则完全插件化。几种标准认证方案呈现出清晰的安全递进:Basic认证只是把 用户名密码做Base64编码(不是加密),一旦被截获等于明文泄漏;Digest认证 把密码加一个动态盐值(Nonce)再做哈希摘要,能抵御明文窃取,但依然扛 不住中间人攻击;Bearer认证基于OAuth 2规范,用令牌代替密码本身作为凭证, 从根本上避免了密码在传输链路上出现。这条递进链的核心逻辑是:越靠后的 方案,越不依赖”传输链路本身是安全的”这个假设。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第5章"架构安全性"
5.1.1节"认证的标准"(源文件:_epub-src对应OEBPS/Text/chapter58.xhtml)
- 结论依据:原文区分通信信道/协议/内容三层认证,详述HTTP认证框架用
WWW-Authenticate/Authorization分离"目的"与"实现",并逐一说明Basic
(Base64编码非加密)、Digest(加盐哈希仍怕中间人攻击)、Bearer(基于
OAuth 2用令牌)三种方案的安全递进,直接支撑本卡片结论。
- 原始内容:HTTP认证框架提出认证方案是希望能把认证"要产生身份凭证"的
目的与"具体如何产生凭证"的实现分离开来……Basic认证……只是一种主要以
演示为目的的认证方案……Digest……针对Base64明文发送的风险……遇到中间人
攻击时依然存在显著的安全风险。