spring的技术笔记
学习鉴权与防护第 18 / 23 篇2 分钟阅读

Guard 与权限思路

Guard 与权限思路

这节要解决什么

学会用 Guard 保护路由,并区分「认证」和「授权」。

先用大白话

  • 认证(Authentication):你是谁?(有没有合法 token)
  • 授权(Authorization):你能不能干这事?(是不是资源主人 / 是不是管理员)

Nest 的 Guard 很像 Vue Router / Nuxt 的导航守卫:

进门前先查通行证,不通过就拦下。

常见写法:

  • @UseGuards(JwtAuthGuard) 挂在控制器或方法上
  • 通过后把 user 挂到请求上
  • Controller 用装饰器取出当前用户 id,传给 Service

对着项目看

关注这些文件(名称可能略有出入,以仓库为准):

  • jwt.strategy.ts / jwt-auth.guard.ts:如何解析 Bearer token
  • bookmarks.controller.ts:哪些接口需要登录
  • 自定义 @CurrentUser() 装饰器:方便取当前用户

试一下:

# 不带 token → 应该 401
curl http://localhost:3000/bookmarks
 
# 带 token → 200
curl http://localhost:3000/bookmarks \
  -H "Authorization: Bearer 粘贴你的token"

再测授权:用户 A 的 token 去删用户 B 的书签 id → 应 403 或 404(项目里选择一种明确策略即可)。

实战扩展(先知道名字)

  • 角色:admin / user(RBAC)
  • 刷新令牌:access 短、refresh 长
  • API Key:给服务与服务之间用

入门先把「登录用户 + 只能碰自己的数据」做稳,已经超过很多教程质量。

验收清单

  • 能解释 Guard 和 Vue 路由守卫的相似点
  • 会区分 401(没登录)和 403(没权限)
  • 受保护接口在无 token 时会失败

下一节 → 练习与验收.md