接口加密《二》: API权限设计总结

来源:http://meiyitianabc.blog.163.com/blog/static/105022127201310562811897/

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/)是否有权限,如果有权限则通过,没权限则关闭。

6. 步骤四: 如果用户权限通过,这个时候就到了最重要的一步,SIGN签名的验证。

签名算法:

加密方式 md5(POST参数(升序排序,除key sign参数除外) + 用户密钥)

PHP加密算法代码:

[php] view plaincopyprint?

  1. foreach ($p as $v) {
  2. $temp = explode("=", $v);
  3. $pArr[$temp[0]] = $temp[1];
  4. }
  5. ksort($pArr);
  6. foreach ($pArr as $k => $v) {
  7. $pStr2 .= $k . $v ;
  8. }
  9. md5($pStr2 . $secret)

注意:加密的时候,需要将timestamp带上,防止客户端篡改。

客户端,将自己需要传递的参数进行升序排序,然后加上自己key对应的密钥(密钥在服务端数据库中有一份保存,这个是不能对外公开的)进行MD5加密,通过参数sign传递到服务端。

服务端拿到sign值后,对传递过来的参数也进行同样的算法排序,并经过用户的key查询得到密钥,然后进行一次加密算法,得到的服务端的sign和客户端传递过来的sign进行比较,如果相同则表示是可以通过的,如果中途有人篡改数据等,那么最终加密出来的sign就是不一致的,这样保证了用户传递数据的可靠性和安全性。

7. 步骤五:检查时间戳时间,比较客户端时间和服务端时间是否在10分钟之内,如果10分钟之外了,那么返回超时的提示,这样能保证调用过的接口数据能在一定时间内销毁掉。

8. 步骤六:调用相应逻辑

时间: 2024-11-13 10:07:10

接口加密《二》: API权限设计总结的相关文章

【转载】API权限设计总结

本文内容转自:http://blog.csdn.net/initphp/article/details/8636669 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. 接口调用的控制器

ASP.NET MVC +EasyUI 权限设计(二)环境搭建

请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问common.cnblogs.com这个域名,一直出现"Aborted",非常的郁闷. 页面就是这样子的,不知道为什么,难道是不是我的3个终端有问题吧,还是园子的服务器有问题呢?还是路由器的问题呢?到现在这个问题还没解决,郁闷死了!弄得心情非常的不爽. 好吧,不在说这个问题了,开始我们的正

ASP.NET网站权限设计实现(二)——角色权限绑定

1.关于使用的几张表的说明 (1)Module:模块表,记录模块名称.编码等模块基本数据. (2)Permissions:权限表,记录所有模块权限distinct之后的数据. (3)ModulePermissions:模块权限,记录每个模块对应的权限,一个模块可能存在多条数据,每条表示该模块的一个操作权限. (4)Roles:角色表,记录角色名称.编码等角色基本数据. (5)RolePermissions:角色权限表,记录每个角色对应的权限,一个角色可能存在多条数据,每条数据表示该角色在某个模块

用户权限设计(二)

上一篇文章:用户权限设计(一) 下面介绍一下权限的更新和验证 @RequestMapping("authDemoSubmit") public String authDemoSubmit(@ModelAttribute("vm") UserAuth mUserAuth) { Map<String, List<String>> authMap = mUserAuth.getUserAuthMap(); Iterator<Map.Entry

我的权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net)

一.前言 至毕业后一直在做企业Web开发,做过的项目也有不少,每个项目的框架设计都不是一样,但是每个项目的权限模块都是我做的,这样慢慢以来,就形成自己的一套权限开发框架,并成功的在自己做过的几个外包项目中使用,反应较为不错,尤其是BootStrap的页面风格深受客户喜欢. 二.框架设计 下面就开始看图说话环节: 架构设计 详细解决方案 01_Murphy.Web:表现层,采用了区域方式实现了各个模块的分离 02_Murphy.Business:业务逻辑层 03_Murphy.Core:框架核心层

OFBiz 初步 之 权限设计

简介 Apache Open For Business(Apache OFBiz) 是Apache开源的一个经典ERP项目.它提供了一套企业应用,用于集成以及自动化一些企业的"商业流程". 从学习角度来看,它也是一个非常不错的企业级应用框架.这篇文章从OFBiz的权限设计这一切入点来谈谈OFBiz对于应用系统的权限设计. 设计思想简述 OFBiz采用的"安全组"(Security Group)来将"权限"跟"用户"联系起来.系

简单的权限设计

原来做OA的时候一直不知道权限怎么写. 受到原来粗粒度权限控制的观念影响,所以将问题复杂化了让我不知道怎么下笔. 原先的粗粒度控制权限: 书写一个过滤器,过滤器的映射范围即权限控制的范围. 游客只能访问公共的部分jsp或者controller. 我的例子的权限分为3个地方: 游客.用户.管理员. 所以写一个或者两个过滤器.在访问指定内容前进行session或者application中的身份信息验证,然后通过与否. 过滤器控制多个jsp主要是通过jsp的命名规范和文件夹规范,利用通配符*实现.控制

大话权限设计

前言 如何实现一个高效简单的系统权限体系是我们长期以来都在思考的问题,也是最近一年来我思考得最多的问题,我们所期望的权限都是应当能够根据应用的需要不断添加和扩展的权限,并且最好能够以最简单的方式来支持,那就最好不过了. 内容 什么是权限系统 一个简单的设计 基于角色的访问 最初的数据权限 更好的解决方法 最近的战役 总结 什么是权限系统 那么我们需要一个什么样的权限系统呢或者说什么是权限,我查看了很多的相关资料想要试图解决这个问题,最后看一个最简单最明确的答案"安全问题就是解决谁对什么能够进行什

从涂鸦到发布——理解API的设计过程(转)

英文原文:From Doodles to Delivery: An API Design Process 要想设计出可以正常运行的Web API,对基于web的应用的基本理解是一个良好的基础.但如果你的目标是创建出优秀的API,那么仅凭这一点还远远不够.设计优秀的API是一个艰难的过程,如果它恰巧是你当前的工作任务,那么你很可能会感到手足无措. 不过,优秀的设计绝对是可以实现的.本文所描述的流程将帮助你获得成功,我们将共同研究什么是优秀的设计,以及迭代式的流程如何帮助我们实现这一目标.我们还将叙