接口暴露出去之后

接口只在公司内部用时,大家图省事,常常一个通用密钥走遍所有服务。一旦接口要给外部、给前端、给第三方用,安全就从可选项变成了必选项——因为你不知道对面是谁、会怎么用。

API 安全的目标不是把接口锁死到没人能用,而是让「该谁用、能用什么、用多少」都清清楚楚。

好用和安全并不矛盾:好的鉴权设计,是让合法用户无感通过,让越界请求当场被拦下。
本文核心知识点
  • 认证确认你是谁。
  • 授权确认你能做什么。
  • 令牌用短期凭证代替长期密码。
  • 最小权限只给刚好够用的权限。
  • 限流挡住滥用与刷量。
API 安全示意:蓝色渐变背景左右两个发光笔记本服务模块轮廓,中间发光通道中央悬浮一面发光蓝色盾牌,盾牌前挂一把发光钥匙和一把发光挂锁,通道上串联发光权限节点小圆点,扁平科技插画
接口之间的通道上,一道盾牌加一把锁,把好谁能过、能做什么。

先分清:认证还是授权

安全设计第一步,是把两件常被混为一谈的事分开:认证是「你是谁」,授权是「你能做什么」。先认出人,再决定给他开哪扇门。

问题属于
你是已登录的用户吗认证
你能修改这条数据吗授权
这个第三方应用能读你的订单吗授权

把这两层分开设计,权限模型才清晰,也方便复用。

令牌:别把账号密码到处传

最危险的做法,是把账号密码直接放进每个请求里传来传去。更稳的方式是用令牌:登录后拿到一个有时效的凭证,后续请求带它,过期再换。

# 令牌的基本思路
1. 用凭据换一个短期令牌
2. 后续请求带上这个令牌,不再传密码
3. 令牌过期后用刷新机制换一个新的
# 即便令牌泄露,窗口也有限,比长期密码安全。

令牌要短时效、可吊销,一旦发现异常能立刻让它失效。

最小权限:给刚好够用的钥匙

很多安全事故,不是被攻破了,而是某个本不该有大权限的令牌,恰好被人拿走了。缓解办法是最小权限:每个调用方只拿到完成任务所必需的那点权限。

做法好处
按范围拆分权限读和写分开,只读令牌不能改数据
限制令牌能访问的资源泄露了也翻不出多大浪
定期轮换密钥降低长期泄露的影响

权限给得刚好,泄露时的爆炸半径就小。