API权限设计总结

最近在做API的权限设计这一块,做一次权限设计的总结。

1. 假设我们需要访问的API接口是这样的:http://xxxx.com/openapi/v1/get/user/?key=xxxxx&sign=sadasdas&timestamp=2013-03-05 10:14:00&c=c&a=a&d=d

2. 接口调用的控制器:openapi/v1/get/user/

3. 步骤一:作为服务端,首先要检查参数是否正确:key (用户的key) ;sign(加密的签名串) ;timestamp (请求的时间,服务端对请求有时间生效),这些参数如果有一个参数没传递,肯定返回参数不正确的结果。

4. 步骤二:参数如果都传递正确,这个时候需要检查API的白名单权限,API也就是(openapi/v1/get/user/)是否存在在我们的数据库中,一般会有一张API的数据表,如果调用的API不在我们的数据库白名单中或者这个API已经关闭访问了,那么要返回禁止访问的结果。

5. 步骤三: 如果API在白名单中,那么现在就要检查用户的KEY是否正确了,服务端会有一张用户权限表,这个数据表主要用来记录用户的key secret(密钥) 以及API权限列表,检查这个用户对访问的API(openapi/v1/get/user/)是否有权限,如果有权限则通过,没权限则关闭。

两张表:API和Aouth

API:id,api_name,is_valied

Aouth:id,app_id,app_secret,api_id

一对多的关系,API是1,Aouth是多

管理API配置页面:填app_id,app_secret,api_name;接口调用方带这三个参数来访问服务接口

接口进来,首先定义该接口的api_name,例如:String = openapi/v1/get/user/

通过api_name查询id,is_valied,该接口是否为开放状态?如果可用访问,is_valied = 1

通过id即api_id查询app_id,app_secret,与调用者带过来的进行比较,如果检验通过放行。

具体实现方式有springboot+自定义注解+AOP切面实现单个接口权限控制,再下一篇文章

猜你喜欢

转载自blog.csdn.net/qq_34707991/article/details/81510119