后端、接口与数据 · 综合

认证与授权:你是谁,以及你被允许做什么

一句话: 身份和授权是两个不同的问题,而大多数漏洞来自第二个只在界面上检查、没在服务端检查。

分离

认证回答的是「用户是谁」。授权回答的是「他是否被允许对这个资源执行这个操作」。在界面上藏掉一个按钮不是授权——任何请求都可以直接发送。

规则是:每条路由都要针对具体资源检查授权,而不只是检查用户已登录。

实用的模型

按角色——简单,对大多数系统够用。按归属和所有权——当用户只能看到自己组织的数据时需要。按细粒度策略——强大但维护昂贵,只在真正需要时才用。

从简单开始,并把规则集中记录在代码的一个地方,而不是散落在二十处检查里。

令牌

访问令牌设短过期时间、刷新令牌可以被吊销、登出事件有一份拒绝名单。在服务端保留足够的信息以便立即吊销访问权——这项能力恰恰会在没时间去开发它的那一天被需要。

深入一层

最常见的危险是通过标识符直接访问资源:把地址里的数字换一个,就返回了别人的数据。在每条接收标识符的路由上系统性地检查这一点,并加一个尝试跨用户访问的自动化测试。