MERN 应用中的身份验证:JSON Web 令牌、bcrypt、Redis 和 OAuth2

发布日期:2026-04-22 09:23:00   浏览量 :1
发布日期:2026-04-22 09:23:00  
1

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

MERN 应用中的身份认证:JWT、bcrypt、Redis 和 OAuth2

大多数网络应用的安全漏洞都可追溯到一个失败点:薄弱的身份认证。在 2023 年,MOVEit Transfer 数据泄露事件暴露了 6000 万条记录,部分原因是会话令牌可被预测,且不存在撤销机制。本指南将引导你构建能够经受生产环境考验的身份认证系统。

1. 身份认证与授权

身份认证回答一个问题:你是谁?授权回答另一个问题:你被允许做什么?它们是按顺序工作的独立系统。

用户使用电子邮件和密码进行身份认证。服务器返回一个令牌。该令牌随后决定授权:用户可以访问哪些路由、读取哪些数据以及执行哪些操作。

定义:身份认证
验证身份声明的过程。你声称自己是 user@email.com。服务器确认或否认这一声明。

定义:授权
在身份确认后检查权限的过程。即使是已验证的用户,也无法访问其他用户的私有数据。

为什么传统会话在大规模场景下会失效

  • 老式的会话认证将在数据库中存储一个会话 ID
  • 每个传入的请求都会触发一次数据库读取以验证该 ID
  • 在单服务器设置中,这运行良好
  • 在拥有五个并行运行的 Node.js 实例的分布式系统中,每个实例都不知道其他实例创建了哪些会话

你要么运行一个共享会话数据库(瓶颈),使用将会话路由到同一服务器的粘性会话(脆弱),要么切换到无状态令牌。JWT 通过在令牌本身内部编码身份来解决这个问题。

延伸阅读:OWASP 会话管理速查表

2. JSON Web 令牌 (JWT)

JWT(JSON Web 令牌)是一个经过 base64url 编码的字符串,由三个用点号分隔的部分组成。

  • 头部: 声明签名算法(HS256)和令牌类型(JWT)
  • 载荷: 包含声明,即关于用户的陈述(用户 ID、角色、过期时间)
  • 签名: 一种加密哈希,证明令牌来自你的服务器

警告
载荷是经过 base64 编码的,而非加密。任何截获 JWT 的人都可以解码并读取其内容。切勿在 JWT 载荷中存储密码、信用卡号或敏感个人数据。

签名使得篡改行为可被检测。如果一个

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部