第8章 确认访问用户身份的认证
比较BASIC、DIGEST、SSL客户端认证与表单认证,并解释Session和Cookie如何保持认证状态
第8章 确认访问用户身份的认证
本课程对应[日]上野宣《图解HTTP》,于均良译,人民邮电出版社/图灵教育,2014年4月首版,308页,双色印刷,ISBN 9787115351531;原书《HTTPの教科書》,ISBN 9784798126258。图灵官方资料标明出版日期为2014年4月22日、172张图解;正式目录为11章、202个节/小节节点。本页严格按该首版章次组织,不用后续规范替换原书语境。
学习目标
- 能解释“第8章 确认访问用户身份的认证”全部正式节点,并把概念定位到真实请求、响应或应用状态。
- 能绘制客户端、中介、服务器之间的消息方向、主体边界和关键状态转移。
- 能设计单变量实验,验证“对任一认证流程能指出凭据形式、挑战与响应、验证位置、会话标识生命周期和退出失效点”。
- 能写出并提交包含原始报文、失败反例、恢复条件和版次边界的独立证据包。
机制总览
第8章 确认访问用户身份的认证:机制路径
- 1
从一条可证伪的HTTP交换开始
先预测:把Base64当加密、把DIGEST当现代安全方案,或只依赖客户端Cookie中的用户身份,会让凭据重放和会话劫持直接成立。把预测写成“请求输入、线上消息、接收方状态、响应输出、最终副作用”五列,再运行实验。若结果与预测不同,先修正模型,不要只截取一个状态码证明自己。
- 2
核心词汇与首版边界
这些词汇按2014年首版语义使用。SPDY、HTTP/2.0、X-XSS-Protection、P3P等保留出版时状态;HTTP/2最终规范、HTTP/3、JWT、OAuth、SameSite等后续技术只能作为另行标注的现代补充,不改变本书目录分母。
- 3
核心机制深读
可用于核对身份的信息包括密码、动态令牌、证书、IC卡和生物特征。可靠流程要同时考虑凭据如何登记、传输、验证、更新、吊销与审计,而不是只看登录页面。
章级决策实验
第8章 确认访问用户身份的认证:机制与证据
切换《第8章 确认访问用户身份的认证》的三个关键教学阶段,先解释机制,再用运行与失败证据验证结论。
选择推理阶段
当前阶段 · 从一条可证伪的HTTP交换开始
先预测:把Base64当加密、把DIGEST当现代安全方案,或只依赖客户端Cookie中的用户身份,会让凭据重放和会话劫持直接成立。把预测写成“请求输入、线上消息、接收方状态、响应输出、最终副作用”五列,再运行实验。若结果与预测不同,先修正模型,不要只截取一个状态码证明自己。
可核验证据
保存「从一条可证伪的HTTP交换开始」的原始请求与响应报文,用 curl 和浏览器网络面板复现成功、重定向、缓存及拒绝路径,并核对状态码与首部。
学完《第8章 确认访问用户身份的认证》后,应能从输入和前置条件推导状态变化,并用可重复的构建、运行或边界测试证明结果。
失效—证据矩阵
第8章 确认访问用户身份的认证:失效与核验
从一条可证伪的HTTP交换开始
典型失效
若只背诵「从一条可证伪的HTTP交换开始」字段而不区分请求语义、缓存边界和安全上下文,代理或浏览器状态变化后会得到错误响应或泄露数据。
核验证据
保存「从一条可证伪的HTTP交换开始」的原始请求与响应报文,用 curl 和浏览器网络面板复现成功、重定向、缓存及拒绝路径,并核对状态码与首部。
核心词汇与首版边界
典型失效
若只背诵「核心词汇与首版边界」字段而不区分请求语义、缓存边界和安全上下文,代理或浏览器状态变化后会得到错误响应或泄露数据。
核验证据
保存「核心词汇与首版边界」的原始请求与响应报文,用 curl 和浏览器网络面板复现成功、重定向、缓存及拒绝路径,并核对状态码与首部。
核心机制深读
典型失效
若只背诵「核心机制深读」字段而不区分请求语义、缓存边界和安全上下文,代理或浏览器状态变化后会得到错误响应或泄露数据。
核验证据
保存「核心机制深读」的原始请求与响应报文,用 curl 和浏览器网络面板复现成功、重定向、缓存及拒绝路径,并核对状态码与首部。
从一条可证伪的HTTP交换开始
先预测:把Base64当加密、把DIGEST当现代安全方案,或只依赖客户端Cookie中的用户身份,会让凭据重放和会话劫持直接成立。把预测写成“请求输入、线上消息、接收方状态、响应输出、最终副作用”五列,再运行实验。若结果与预测不同,先修正模型,不要只截取一个状态码证明自己。
本章的主问题是:比较BASIC、DIGEST、SSL客户端认证与表单认证,并解释Session和Cookie如何保持认证状态。原书以图解建立直觉,本课程把图解升级为可操作轨迹:每个箭头必须注明方向、协议对象和完成点;每个安全结论必须附一条攻击或误配置反例。
验收不变量是:对任一认证流程能指出凭据形式、挑战与响应、验证位置、会话标识生命周期和退出失效点。浏览器页面“看起来正常”只能说明某个终点出现,不能单独证明DNS、连接、TLS、缓存、认证或授权中的哪一段正确。
核心词汇与首版边界
↡通过凭据确认访问者声称身份的过程、↡把用户名和密码组合后Base64编码放入Authorization的HTTP挑战响应方案、↡以nonce和摘要计算避免直接发送明文密码的挑战响应方案、↡客户端用证书和私钥向服务器证明身份的TLS双向认证机制、↡服务器保存的会话状态,通常由难预测的Cookie标识关联
这些词汇按2014年首版语义使用。SPDY、HTTP/2.0、X-XSS-Protection、P3P等保留出版时状态;HTTP/2最终规范、HTTP/3、JWT、OAuth、SameSite等后续技术只能作为另行标注的现代补充,不改变本书目录分母。
核心机制深读
认证对象不只是密码
可用于核对身份的信息包括密码、动态令牌、证书、IC卡和生物特征。可靠流程要同时考虑凭据如何登记、传输、验证、更新、吊销与审计,而不是只看登录页面。
动手试:先写下预期请求、响应与状态变化,再捕获一次正常交换和一次只改一个变量的失败交换。比较状态码、首部、主体、缓存或会话状态,确认结论来自证据而非浏览器表象。
BASIC与DIGEST的真实边界
BASIC仅做Base64编码,必须依赖HTTPS保护;DIGEST把密码、realm、nonce、方法和URI等输入摘要,避免原密码直接上网,但算法与部署限制使其不能替代HTTPS。两者都由401和WWW-Authenticate发起挑战。
客户端证书的成本
服务器请求客户端证书,客户端证明持有相应私钥,服务器验证链和用途。它能形成强设备或人员凭据,也带来证书签发、安装、私钥保护、吊销和跨设备使用成本,常与密码形成双因素。
表单认证依赖会话纪律
应用验证表单凭据后应重新生成Session ID,通过Set-Cookie发给客户端,并设置适当作用域、Secure与HttpOnly。退出、超时、权限变化要在服务端失效会话;只删除浏览器Cookie不足以使被盗标识失效。
原书目录核对清单
本页承担10个目录或复习节点,正文、图解、实验和题目必须能反向定位每一项:
- 8.1 何为认证
- 8.2 BASIC认证
- 8.3 DIGEST认证
- 8.4 SSL客户端认证
- 8.4.1 SSL客户端认证的认证步骤
- 8.4.2 SSL客户端认证采用双因素认证
- 8.4.3 SSL客户端认证必要的费用
- 8.5 基于表单认证
- 8.5.1 认证多半为基于表单认证
- 8.5.2 Session管理及Cookie应用
复原正常协议轨迹
固定URI、客户端、网络和服务端状态,标出请求行、首部、主体、中介与最终响应。
可复现实验
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="members"
GET /private HTTP/1.1
Authorization: Basic YWxpY2U6cGFzcw==challenge: realm + nonce + qop
client: digest(username, password, method, uri, nonce)
server: recompute and comparePOST /login -> verify credentials -> rotate session id
Set-Cookie: sid=random; Path=/; Secure; HttpOnly
Cookie: sid=random -> lookup server-side session独立证据门
第8章 确认访问用户身份的认证 的最小证据包包含:首版目录节点、请求与响应原文、连接/中介方向、主体边界、缓存或会话状态、一个单变量失败、最终副作用、已知限制、恢复步骤、责任人与复核人。
练习
练习
问题 1:为什么“第8章 确认访问用户身份的认证”必须固定2014年首版语境?
问题 2:怎样构造“把Base64当加密、把DIGEST当现代安全方案,或只依赖客户端Cookie中的用户身份,会让凭据重放和会话劫持直接成立”的最小反例?
问题 3:何时可以认为本页完成独立交接?
本章回顾
“第8章 确认访问用户身份的认证”的核心是比较BASIC、DIGEST、SSL客户端认证与表单认证,并解释Session和Cookie如何保持认证状态。真正掌握不止是认出术语,而是能让一条请求在消息、连接、中介、表示、身份和攻击边界之间闭环,并用失败实验说明边界一旦被破坏会发生什么。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 认证
通过凭据确认访问者声称身份的过程。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
- BASIC认证
把用户名和密码组合后Base64编码放入Authorization的HTTP挑战响应方案。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
- DIGEST认证
以nonce和摘要计算避免直接发送明文密码的挑战响应方案。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
- SSL客户端认证
客户端用证书和私钥向服务器证明身份的TLS双向认证机制。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
- Session
服务器保存的会话状态,通常由难预测的Cookie标识关联。掌握标准是能在原始请求或响应中定位它,并构造一条最小反例。
← 上一页:第7章 确保Web安全的HTTPS · 下一页:第9章 基于HTTP的功能追加协议 →
原版目录概念补充核对
以下条目补齐官方目录中容易被示例主线掩盖的概念。它们不重复罗列目录,而是明确每项概念的机制、适用边界和验收证据。
8.2 BASIC认证:机制、边界与证据
第8章 确认访问用户身份的认证中的8.2 BASIC认证涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。
8.3 DIGEST认证:机制、边界与证据
第8章 确认访问用户身份的认证中的8.3 DIGEST认证涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。
8.4 SSL客户端认证:机制、边界与证据
第8章 确认访问用户身份的认证中的8.4 SSL客户端认证涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。
8.4.1 SSL客户端认证的认证步骤:机制、边界与证据
第8章 确认访问用户身份的认证中的8.4.1 SSL客户端认证的认证步骤涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。
8.4.2 SSL客户端认证采用双因素认证:机制、边界与证据
第8章 确认访问用户身份的认证中的8.4.2 SSL客户端认证采用双因素认证涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。
8.4.3 SSL客户端认证必要的费用:机制、边界与证据
第8章 确认访问用户身份的认证中的8.4.3 SSL客户端认证必要的费用涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。
8.5 基于表单认证:机制、边界与证据
第8章 确认访问用户身份的认证中的8.5 基于表单认证涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。
8.5.1 认证多半为基于表单认证:机制、边界与证据
第8章 确认访问用户身份的认证中的8.5.1 认证多半为基于表单认证涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。
8.5.2 Session管理及Cookie应用:机制、边界与证据
第8章 确认访问用户身份的认证中的8.5.2 Session管理及Cookie应用涉及身份、机密性或输入信任边界,不能把“使用 HTTPS”或“已经登录”当作完整安全证明。应分别验证握手/证书、凭据传递、会话属性、授权拒绝和恶意输入,并检查敏感信息是否进入 URL、日志或可被脚本读取的存储。