请说明在 Express 框架下,用户登录认证与权限控制(授权)分别可以通过哪些方式实现,并阐述其核心原理与常见实现要点。
考察说明
考查对 Express 中认证与会话管理、授权控制机制的理解与实战掌握程度。
回答思路
- 【回答框架 1】认证用于确认身份,常用方案有 Session-Cookie 与 Token(如 JWT)。Session-Cookie 依赖服务端存储会话状态,通过 Cookie 传递 sessionId,适合传统 Web 应用;JWT 则将用户信息签名后发给客户端,服务端无状态,适合 API 或分布式场景。
- 【回答框架 2】在 Express 中,可通过中间件实现认证逻辑。例如使用 express-session 管理 Session,配合 Passport.js 策略(如 LocalStrategy)处理登录验证;或使用 jsonwebtoken 签发与校验 JWT,在请求头 Authorization 中携带 Bearer Token,并由自定义中间件解析并挂载用户信息到 req 对象。
- 【回答框架 3】授权用于控制资源访问权限,需在认证通过后判断用户角色或权限。常见做法包括:在路由处理前添加授权中间件,检查 req.user 中的角色是否匹配所需权限,不匹配则返回 403;或使用 ACL/RBAC 模型,将权限映射到角色,可借助 express-acl、casbin 等库简化实现。
- 【关键点 1】认证关注身份验证,授权关注权限控制,两者需配合使用。
- 【关键点 2】Session-Cookie 与 JWT 各有优劣:Session 有状态易吊销,JWT 无状态利于扩展但难主动失效。
- 【关键点 3】认证中间件应统一校验身份,授权中间件按角色或权限拦截请求。
- 【易错点 1】JWT 一旦签发在过期前无法主动失效,处理注销或权限变更时需额外方案(如黑名单)。
- 【易错点 2】将敏感数据放入 JWT 或 Cookie 可能导致信息泄露,需注意加密与存储。
- 【易错点 3】仅靠前端隐藏按钮实现授权并不可靠,必须后端强制校验。