登录与权限:会话、角色和操作审计|课后复习
本次商城补强回收
本日产物:受保护订单 API、角色矩阵及拒绝后状态记录。逐项回到课堂同名章节,解释 应用已学函数/集合/装饰器/异常/上下文清理/async;认证、授权、Session、Cookie、CSRF 和审计,指出本人代码中输入、状态与失败的位置。再用独立变体证明解释有效,不把讲过当会做。
| 风险 | 提前预防 | 怎样发现 | 怎样处理 | 怎样复验 |
|---|---|---|---|---|
| 前端自报角色或隐藏按钮 | 在后端读可信会话并默认拒绝 | 直接请求越权操作 | 补服务端入口校验 | 403 且订单不变 |
| 异常后残留身份或吞错 | 清理放 finally,保留错误语义 | 连续两次不同身份请求和故障 | 修清理与 401/403/503 转换 | 身份不串请求,日志无凭据 |
| 会话故障回源放行 | 身份未知就拒绝 | 模拟会话存储失败 | 返回 503 不执行业务 | 恢复后重新验证身份再操作 |
自测:角色规则测试;401/403/503;CSRF;旧 Cookie 注销失效;拒绝无状态变化,成功审计同事务。下一日接口:同一套身份与错误合同接浏览器,复用请求支架。
今天学会了什么
能在所有受保护端点检查员工身份和角色,正确处理过期、注销和 CSRF,并让业务修改与操作审计共同提交。
在已有业务调用前标出身份和权限检查,在事务中标出操作记录。说明为什么允许商品缓存降级不能推出允许绕过会话。
今天讲了什么(对照复习)
下面逐项对应课堂正文。先盖住右边那一栏,凭记忆回答;卡住了再翻回左边同名的小节。光说得出名字不算会,还要能讲清它会做什么、什么时候会失效。
| 课堂对应章节 | 必须能解释的机制与边界 |
|---|---|
| 能打开后台,不代表有权处理订单;员工与客户是不同身份 | 认证确认是谁,授权决定允许做什么,审计追溯已执行动作。Customer 表示订单归属,员工身份来自可信会话,不能由 customer_id 决定。RBAC 按角色授予动作,当前未做客户或租户的数据隔离。 |
| 员工与客户是不同身份 | viewer 只读;support 可查询、创建及取消待付款订单;admin 另可改价和模拟收款。角色允许不替代订单状态规则,前端隐藏按钮不能替代服务端拒绝。 |
| 密码不按明文保存 | 随机盐和慢哈希提高离线猜测成本;当前 PBKDF2-HMAC-SHA256,校验采用常量时间比较。不存在账号与错密码提示一致并限制重复尝试;员工哈希配置是教学简化,不等于注册/找回/SSO。 |
| 浏览器、Cookie 与服务端会话 | 浏览器带随机会话凭证,服务端保存状态;登录换凭证,注销删服务端会话,空闲与绝对有效期分别限制生命周期。HttpOnly 限制脚本读取,Secure 限制 HTTPS 传输,SameSite 控制跨站携带。 |
| 浏览器、Cookie 与服务端会话;给所有受保护入口加同一规则 | Cookie 自动携带仍需防 CSRF,写请求带 X-CSRF-Token;CORS 管浏览器跨源读取,不代替认证授权。所有订单、运营和库存受保护,公开商品与健康按合同开放;不能漏掉旧端点。 |
| 给所有受保护入口加同一规则;现场验证 | 无有效身份为 401,无操作权限为 403,会话服务故障为 503 并拒绝执行。逐个验证未登录、越权、缺 CSRF、注销重放及故障,同时核对业务状态未变化。 |
| 操作记录与事务保持一致 | operation_audit 记录可信操作人、动作和时间,与业务修改同事务提交/回滚;访问日志用于诊断,两者不同。当前并非完整登录/拒绝事件审计平台,不记录密码和会话令牌。 |
出了问题:怎么发现、怎么修、怎么验证
只在你自己那份课程副本或专用实验数据上复验,把改之前和改之后的真实结果都留下来。
| 风险/现象 | 提前预防 | 怎样发现 | 怎样处理 | 怎样复验 |
|---|---|---|---|---|
| 隐藏按钮但接口允许越权 | 服务端统一角色校验 | viewer 直接调用写接口,support 尝试改价 | 补受保护入口和角色规则 | 403 且订单、库存、价格不变 |
| customer_id 被当操作人或旧端点漏鉴权 | 身份只从已验证会话取 | 更换请求字段并遍历受保护端点 | 分离客户与员工,统一服务端校验 | 伪造字段不能改变操作者,未登录返回 401 |
| 只清 Cookie 或会话永不过期 | 服务端注销,设两类过期 | 实验环境重放注销凭证并测到期边界 | 删除状态并修正过期规则 | 旧会话与过期会话都不可用 |
| 只开 HttpOnly 却无 CSRF | 写请求加入 CSRF 检查 | 带有效会话但不带/错带 CSRF | 修请求头和服务端校验 | 拒绝错误令牌,合法操作仍可执行 |
| Redis 故障放行或审计与业务不同步 | 身份故障拒绝,审计同事务 | 分别停身份依赖和注入事务失败 | 保持 503;修共同提交回滚边界 | 故障无越权修改,业务与审计共同成功或撤销 |
闭卷自测
先自己答一遍,再去运行或翻回课堂核对;不确定的地方标出来,别用 AI 的答案顶掉你自己的第一次判断。
- 认证、授权、审计各回答什么?Customer 与后台员工为什么不能合并理解?
- 给 viewer、support、admin 各举一条允许和受限操作;角色允许后还需检查什么业务条件?
- Cookie 与 Session、空闲过期与绝对过期各是什么关系?只删除浏览器数据为什么不够?
- HttpOnly、Secure、SameSite、CSRF、CORS 分别保护哪个边界,哪一个能代替服务端授权?
- 怎样用 401/403/503 和状态前后值证明拒绝确实生效?业务修改失败时审计应怎样?
再看一眼真实业务
将有赞公开角色配置与课程三种角色对照,只比较工作职责和操作权限;平台具体角色名、数据范围和后端校验不能由课程实现反推。
今天留下什么,下节课怎么接着用
保留受保护 API、角色矩阵、Cookie/会话生命周期说明、失败请求与状态不变证据、审计同事务记录。W03-D04 让浏览器正确携带身份和 CSRF,并呈现不同错误状态。
所有权限反例仅在课程实验环境执行。注册找回、SSO、多租户与完整审计系统仍属扩展;模拟收款不连接真实支付平台。