2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
MERN 应用中的身份认证:JWT、bcrypt、Redis 和 OAuth2
大多数网络应用的安全漏洞都可追溯到一个失败点:薄弱的身份认证。在 2023 年,MOVEit Transfer 数据泄露事件暴露了 6000 万条记录,部分原因是会话令牌可被预测,且不存在撤销机制。本指南将引导你构建能够经受生产环境考验的身份认证系统。
1. 身份认证与授权
身份认证回答一个问题:你是谁?授权回答另一个问题:你被允许做什么?它们是按顺序工作的独立系统。
用户使用电子邮件和密码进行身份认证。服务器返回一个令牌。该令牌随后决定授权:用户可以访问哪些路由、读取哪些数据以及执行哪些操作。
定义:身份认证
验证身份声明的过程。你声称自己是 user@email.com。服务器确认或否认这一声明。定义:授权
在身份确认后检查权限的过程。即使是已验证的用户,也无法访问其他用户的私有数据。
为什么传统会话在大规模场景下会失效
- 老式的会话认证将在数据库中存储一个会话 ID
- 每个传入的请求都会触发一次数据库读取以验证该 ID
- 在单服务器设置中,这运行良好
- 在拥有五个并行运行的 Node.js 实例的分布式系统中,每个实例都不知道其他实例创建了哪些会话
你要么运行一个共享会话数据库(瓶颈),使用将会话路由到同一服务器的粘性会话(脆弱),要么切换到无状态令牌。JWT 通过在令牌本身内部编码身份来解决这个问题。
2. JSON Web 令牌 (JWT)
JWT(JSON Web 令牌)是一个经过 base64url 编码的字符串,由三个用点号分隔的部分组成。
- 头部: 声明签名算法(HS256)和令牌类型(JWT)
- 载荷: 包含声明,即关于用户的陈述(用户 ID、角色、过期时间)
- 签名: 一种加密哈希,证明令牌来自你的服务器
警告
载荷是经过 base64 编码的,而非加密。任何截获 JWT 的人都可以解码并读取其内容。切勿在 JWT 载荷中存储密码、信用卡号或敏感个人数据。
签名使得篡改行为可被检测。如果一个
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

