restful api 权限设计 - 初探一
在现在主流的前后端分离的系统中,或者是专注于提供api服务的系统,如何保护好所提供的后端restful api,使得非常重要。保护api的方面很多,限流,防刷,校验可以说都是保护,今天来谈谈很重要的api的认证鉴权保护,大概的思路。需求两点:首先认证 – 我们可以配置哪些api需要用户认证通过才能访问哪些可以直接访问,还有就是鉴权 – 我们可以配置管理哪些api对于某个用户能调用哪些不能调用。
题外-有些会说页面按钮或者页面显示的权限问题,个人认为按钮,页面这类的显示不显示,是前端的权限管理责任划分,所以这次并不会去讨论它。
认证
主流的认证方式有 token - jwt, basic auth, digest auth等,用户携带认证信息访问restful api,后端会有个前置过滤拦截器(filter,interceptor,aop都可以实现)来拦截请求,获取请求信息里的认证信息,通过算法校验或者和系统内用户数据源(可以来自数据库,文本等)对比判断,校验通过才会让用户请求流程继续下去。
这是个大概的认证流程,还有很多细节需要考虑到,比如有些api不需要认证也要被访问,数据源的设计是怎么样的,用户携带多种认证信息怎么判断等。
鉴权
用户认证流程通过后,就需要对认证后的用户访问此api进行鉴权,判断此用户是否能访问此api。主流易用的权限模型是RBAC - 基于角色的权限模型。我们这里对restful api来说就是, api赋权给角色,用户拥有此角色,用户就能访问此restful api。即 用户