该技能用于实现安全可靠的认证(Authn)与授权(Authz)。核心原则是绝不信任客户端:认证负责识别身份,授权负责放行操作;所有敏感路由都必须在服务端校验会话或令牌;所有权与角色须按资源逐个检查,而不只是判断“已登录”;密钥只存于服务端,Cookie 设置正确标志,遇到不确定时默认拒绝(fail closed)。
会话与令牌方面,建议在技术栈允许时优先使用服务端会话或安全的 httpOnly Cookie。若使用 JWT,应短有效期、轮换刷新令牌并校验 audience/issuer。Cookie 应设置 HttpOnly、Secure、合适的 SameSite,path 最小化;登出及密码重置或账号失陷时须使会话失效。
授权方面,可建模角色(RBAC)或按资源定义策略,推荐集中式 can(user, action, resource)。须防止 IDOR:绝不能在没有用户或租户范围限定的情况下按 id 查询。UI 可隐藏操作,但服务端仍须强制拦截。
常见流程包括:登录/注册加限流,在适用时不泄露账号是否存在的提示信息;OAuth 使用 state/nonce 与重定向白名单;密码重置用一次性令牌且短期过期;域名要求时进行邮箱验证。集成时应遵循项目既有的 provider(如 Clerk、Auth.js、Supabase 或自建),不要混用两套会话系统,并验证认证 webhook 的签名。
需预防的常见错误:只在中间件做认证而 action/handler 不检查;JWT 中角色不重新校验关键权限;宽松 CORS 配合 Cookie;令牌存于 localStorage 且无 XSS 缓解;管理端点缺少审计日志。完成标准为:敏感路由在服务端受保护,所有权/RBAC 有正反用例测试,Cookie/令牌安全配置,登出与过期正常工作,且租户/用户之间无数据泄露。