🏠

Token令牌与数据安全

网站的身份证和钥匙系统

  • 🎫 什么是Token令牌
  • 🔐 访问控制原理
  • 🔑 公钥私钥机制
  • 🛡️ 数据安全保护

讲师:乌鸦哥

现实中的访问控制

生活中到处都有权限管理

  • 🏢 公司大楼 - 员工卡刷不同楼层
  • 🏥 医院科室 - 医生能进手术室,病人不能
  • 🏦 银行金库 - 只有特定人员才能进入
  • 📱 手机相册 - 私密照片需要密码

网站的数据分级

不是所有数据都能给所有人看

🌍 公开数据

  • 网站首页
  • 产品介绍
  • 新闻资讯
  • 联系方式

🔒 私密数据

  • 个人资料
  • 购买记录
  • 聊天消息
  • 银行信息

👑 特权数据

  • 管理后台
  • 用户列表
  • 财务报表
  • 系统设置

问题来了:如何判断权限?

网站怎么知道该给你看什么?

  • 🤔 困惑 - 链接谁都可以访问
  • 问题 - 怎么区分不同用户
  • 🎯 需求 - 要有身份识别机制
  • 💡 解决 - 引入Token令牌系统

传统方式的问题

😅 想象一下:

  • 每次都要输用户名密码
  • 频繁验证很麻烦
  • 密码在网络中传输不安全
  • 服务器压力大

🎯 我们需要更好的方法

就像活动现场的入场券一样...

什么是Token令牌?

就像活动现场的入场票根

  • 🎫 活动门票 - 验票后盖章或贴标
  • 🔖 临时标识 - 证明你已经验证过身份
  • 🚪 自由进出 - 凭标识可以重复进入
  • 有效期限 - 过期需要重新验证

Token的工作流程

🎯 就像去游乐园:

  1. 买票入园 - 登录验证身份
  2. 手腕盖章 - 服务器发放Token
  3. 凭章游玩 - 用Token访问各种功能
  4. 重复使用 - 不需要重新买票
  5. 当日有效 - Token有过期时间

💡 核心优势:

  • 一次验证,多次使用
  • 不需要传输密码
  • 可以设置权限级别

Token的实际工作原理

背后的技术是怎样的?

  • 🔐 首次登录 - 验证用户名密码
  • 🎫 生成Token - 服务器创建临时凭证
  • 📱 返回给用户 - 存储在浏览器中
  • 🔄 后续请求 - 每次都带上Token

Token包含什么信息?

🆔 基本信息:

  • 用户ID - 你是谁
  • 权限级别 - 你能做什么
  • 过期时间 - 有效期到什么时候
  • 签名验证 - 防止被篡改

🔒 安全特性:

  • 加密存储,无法直接读取
  • 有数字签名,无法伪造
  • 有时间限制,定期失效
  • 可以随时撤销

Token vs Cookie

🍪 Cookie

  • 浏览器自动管理
  • 域名绑定
  • 容易被攻击
  • 功能相对简单

🎫 Token

  • 开发者手动管理
  • 跨域友好
  • 安全性更高
  • 功能更强大

💡 现代网站更多使用Token方式

权限控制规则

后端如何决定你能看什么?

  • 👤 角色定义 - 管理员、会员、游客
  • 📋 权限列表 - 每个角色能做什么
  • 🔍 实时检查 - 每次请求都验证
  • ⚠️ 拒绝访问 - 权限不足时阻止

权限矩阵示例

角色 查看内容 发表评论 删除内容 管理用户
游客
会员
管理员

💡 这些规则都是用代码写的

公钥私钥机制

更高级的安全保护

  • 🔐 非对称加密 - 两把不同的钥匙
  • 🔑 私钥 - 自己保管的秘密钥匙
  • 🗝️ 公钥 - 可以公开的钥匙
  • 🛡️ 数字签名 - 证明消息的真实性

公私钥的比喻

想象一个神奇的邮箱系统

📮 邮箱的两把钥匙:

  • 公钥(投递钥匙) - 任何人都可以用它往邮箱里投信
  • 私钥(取信钥匙) - 只有你有,只有你能取出信件

🎯 神奇之处:

  • 别人可以给你写信(用公钥加密)
  • 但只有你能读(用私钥解密)
  • 即使公钥被人知道也不怕
  • 私钥绝对不能泄露

数字签名的原理

就像古代的印章

📜 古代的印章:

  • 皇帝有独一无二的玉印
  • 盖在圣旨上证明真伪
  • 别人无法伪造
  • 看到印章就知道是真的

💻 数字签名:

  • 用私钥给消息"盖章"
  • 别人用公钥验证真伪
  • 无法伪造和篡改
  • 确保消息来源可靠

JWT - 现代Token标准

JSON Web Token的强大功能

  • 📦 自包含 - 信息都在Token里
  • 🔐 数字签名 - 防止篡改
  • 过期机制 - 自动失效
  • 🌐 跨平台 - 到处都能用

JWT的结构

🧩 三个部分:

Header(头部)
{"alg": "HS256", "typ": "JWT"}
说明加密算法和类型
Payload(载荷)
{"userId": 123, "role": "admin", "exp": 1640995200}
包含用户信息和权限
Signature(签名)
HMACSHA256(base64(header) + "." + base64(payload), secret)
防止数据被篡改

Token的安全最佳实践

如何让Token更安全?

  • 短期有效 - 定期过期更新
  • 🔄 刷新机制 - 无感知续期
  • 🚫 黑名单 - 可以主动撤销
  • 🌐 HTTPS传输 - 加密通道保护

Token存储安全

❌ 不安全的做法

  • 存在localStorage
  • 明文传输
  • 永不过期
  • 泄露后无法撤销

✅ 安全的做法

  • 存在HttpOnly Cookie
  • HTTPS传输
  • 短期过期
  • 支持主动注销

常见安全威胁

⚠️ 主要威胁:

  • Token劫持 - 被恶意获取
  • 重放攻击 - 重复使用旧Token
  • 中间人攻击 - 传输过程被截获
  • XSS攻击 - 通过脚本窃取

🛡️ 防护措施:

  • 使用HTTPS加密传输
  • 设置合理的过期时间
  • 实施Token轮换机制
  • 加强前端安全防护

实际应用场景

Token在哪些地方被使用?

  • 📱 移动应用 - App登录状态管理
  • 🔗 API接口 - 服务间身份验证
  • 🌐 单点登录 - 一次登录多系统使用
  • 🏛️ 微服务 - 分布式系统认证

微信小程序的Token

🎯 工作流程:

  1. 小程序获取微信授权
  2. 向后端发送授权码
  3. 后端验证并生成Token
  4. 小程序保存Token
  5. 后续请求都带Token

💡 这样做的好处:

  • 不需要用户输入密码
  • 微信保证身份真实性
  • 开发者专注业务逻辑
  • 用户体验更好

课程总结

今天我们学到了:

  • 🎫 Token令牌 - 就像活动入场券,一次验证多次使用
  • 🔐 访问控制 - 根据身份决定能看什么数据
  • 🔑 公私钥 - 像神奇邮箱的两把钥匙
  • 🛡️ 数字签名 - 像古代印章保证真实性
  • 📦 JWT标准 - 现代Token的最佳实践
  • ⚠️ 安全考虑 - 如何防范各种威胁

🌟 现在你知道网站是如何安全地管理用户身份和权限的了!