用途
该技能面向 Node.js 应用,帮助开发者实现安全、可扩展的 JWT(JSON Web Token)认证。核心目标包括:使用访问令牌与刷新令牌完成用户身份验证,并通过基于角色的访问控制(RBAC)限制接口权限。
主要能力
- 生成访问令牌与刷新令牌:访问令牌默认 1 小时过期,刷新令牌默认 7 天过期,分别使用不同的密钥。
- 用户注册:检查用户是否已存在,使用 bcryptjs 对密码进行哈希(10 轮),创建用户并返回令牌。
- 用户登录:查找用户、校验密码,成功后生成访问令牌与刷新令牌。
- 认证中间件:从 Authorization 请求头中提取 Bearer 令牌,验证令牌并加载用户信息,挂载到 req.user。
- 基于角色的访问控制:通过 authorize 高阶函数检查用户角色,无权限时返回 403。
- 令牌刷新:校验刷新令牌,并确认其存在于数据库中,然后签发新的访问令牌。
- 密码重置流程:生成短过期(15 分钟)的重置令牌,发送重置邮件,校验令牌用途后更新密码。
使用方式
- 安装依赖:
npm install jsonwebtoken bcryptjs - 注册:哈希密码、创建用户、生成令牌。
- 登录:校验密码、生成令牌。
- 保护路由:在中间件中验证令牌。
示例代码包括 generateToken、generateRefreshToken、register、login、authenticate、authorize、refreshAccessToken、requestPasswordReset、resetPassword 等函数,可直接参考集成到 Express 等 Node.js 框架中。
适用场景
- 构建无状态 REST API
- 需要可扩展性(不依赖服务端会话)
- 移动应用认证
- 微服务架构
- 单点登录(SSO)
安全最佳实践
- 使用强 JWT 密钥(32 位以上、随机)
- 访问令牌短过期(15 分钟至 1 小时)
- 刷新令牌较长过期(7 至 30 天)
- 将刷新令牌存储在数据库中
- 使用 bcrypt 哈希密码(10 轮以上)
- 生产环境使用 HTTPS
- 实施速率限制
- 校验所有输入
- 不要在 JWT 载荷中存储敏感数据
JWT 结构与常见声明
JWT 由 header.payload.signature 三部分组成,头部与载荷使用 base64 编码,签名使用 HMACSHA256 对编码后的头部与载荷加密钥生成。常见声明包括 iss(签发者)、sub(主题/用户 ID)、aud(受众)、exp(过期时间)、iat(签发时间)、nbf(生效时间)。
学习路径
- 初级(1-2 周):理解 JWT 结构、实现注册/登录、创建认证中间件、保护路由。
- 中级(3-4 周):刷新令牌流程、基于角色的访问控制、密码重置流程、令牌黑名单。
- 高级(5-6 周):OAuth 集成、双因素认证、会话管理、安全最佳实践。
相关技能
Express REST API(保护 API 端点)、数据库集成(存储用户)、测试与调试(测试认证流程)、性能优化(令牌缓存)。
限制
资料未提供该技能的具体安装方式、收费模式、支持平台或运行环境要求,暂未提供相关信息。