外观
鉴权、JWT 与接口安全
- 状态:未准备
- 适用方向:Go 全栈 / Go 后端
- 最近复习:待填写
- 下次复习:待安排
一句话回答
认证确认身份,授权确认对资源的操作权限;JWT 签名保护完整性,不默认加密,也不能替代服务端资源授权和撤销策略。
原理解释
常见签名 JWT 包含 header、payload、signature,前两部分可解码。验证端限定算法和可信密钥,校验签名以及业务要求的 exp、iss、aud 等声明;不能只做 Base64 解码,也不能完全相信 token 自报的算法。
短期 access token 限制泄漏窗口,refresh token 需要独立保存、轮换与撤销设计。无状态验签难以立即注销,可配合版本号、会话状态或撤销列表,代价是引入状态查询。
鉴权后用可信用户 ID 查询资源归属或群成员资格;客户端提交的 sender_id 不能直接当身份。数据库查询参数化,密码使用成熟的自适应哈希算法并合理配置成本,不用明文或普通快速摘要。
场景与边界
Cookie 自动随请求发送时要考虑 CSRF,HttpOnly 减少脚本读取但不能消除 XSS 后的恶意操作。Authorization token 也面临 XSS 与存储泄漏。CORS 是浏览器访问控制,不是后端鉴权。WebSocket 需要校验握手身份和适用的 Origin 策略,后续消息仍需授权。
项目中的应用
结合 EinoTalk JWT 与权限材料,准备伪造发送者、普通用户访问管理接口、非成员访问会话三组负向用例,验证情况待本人执行。
常见追问
- 401 和 403? 前者表示缺少有效认证凭据,后者表示服务端拒绝执行,常见于权限不足。
- 有 JWT 就能读所有消息吗? 不能,必须检查会话归属和成员关系。
- 接口如何防重复? 使用业务幂等键、唯一约束和明确的响应复用规则,不能依赖按钮置灰。