接口加密《二》: API权限设计总结
来源:http://meiyitianabc.blog.163.com/blog/static/105022127201310562811897/
API权限设计总结:
最近在做API的权限设计这一块,做一次权限设计的总结。
1. 假设我们需要访问的API接口是这样的:http://xxxx.com/openapi/v1/get/user/?key=xxxxx&sign=sadasdas×tamp=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加密算法代码:
- foreach ($p as $v) {
- $temp = explode("=", $v);
- $pArr[$temp[0]] = $temp[1];
- }
- ksort($pArr);
- foreach ($pArr as $k => $v) {
- $pStr2 .= $k . $v ;
- }
- md5($pStr2 . $secret)
注意:加密的时候,需要将timestamp带上,防止客户端篡改。
客户端,将自己需要传递的参数进行升序排序,然后加上自己key对应的密钥(密钥在服务端数据库中有一份保存,这个是不能对外公开的)进行MD5加密,通过参数sign传递到服务端。
服务端拿到sign值后,对传递过来的参数也进行同样的算法排序,并经过用户的key查询得到密钥,然后进行一次加密算法,得到的服务端的sign和客户端传递过来的sign进行比较,如果相同则表示是可以通过的,如果中途有人篡改数据等,那么最终加密出来的sign就是不一致的,这样保证了用户传递数据的可靠性和安全性。
7. 步骤五:检查时间戳时间,比较客户端时间和服务端时间是否在10分钟之内,如果10分钟之外了,那么返回超时的提示,这样能保证调用过的接口数据能在一定时间内销毁掉。
8. 步骤六:调用相应逻辑
接口加密《二》: API权限设计总结的更多相关文章
- 【转载】API权限设计总结
本文内容转自:http://blog.csdn.net/initphp/article/details/8636669 API权限设计总结: 最近在做API的权限设计这一块,做一次权限设计的总结. 1 ...
- API权限设计总结
最近在做API的权限设计这一块,做一次权限设计的总结. 1. 假设我们需要访问的API接口是这样的:http://xxxx.com/openapi/v1/get/user/?key=xxxxx& ...
- 认证鉴权与API权限控制在微服务架构中的设计与实现(四)
引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完.本文比较长,对这个系列进行收尾,主要内容包括 ...
- API接口加密方式说明
标签: 接口 2016年10月11日 19:41:20 13299人阅读 评论(0) 收藏 举报 分类: API(5) 版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog ...
- REST API权限集成设计
REST API权限集成设计 应用分为两大部分,前端html+后端Rest服务,前端html和后端Rest服务部署完全分离. 目标:可访问资源都处于权限控制之下(意味着通过浏览器地址栏的任意url都会 ...
- asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限
[前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...
- ASP.NET MVC +EasyUI 权限设计(二)环境搭建
请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...
- python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为
python接口自动化测试二十七:密码MD5加密 ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...
- Spring Boot 之 RESRful API 权限控制
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “简单,踏实~ 读书写字放屁” 一.为何用RESTful API 1.1 RESTful是什么? ...
随机推荐
- dtree大型树插件
一.dtree简介 dtree是一个由JavaScript编写成的简单的树形菜单组件,目前免费并且开源.同时支持动态从数据库引入数据. 二.使用方法 1.下载dtree.js及dtree.css 下载 ...
- 基于cxf开发restful风格的Web Service
一.写在前面 webservice一些简单的其他用法和概念,就不在这里赘述了,相信大家都可以在网上查到,我也是一个新手,写这篇文章的目的一方面是想记录自己成长的历程,另一方面是因为学习这个的时候花了点 ...
- Linux supervisord配置使用
supervisor官方网站 http://supervisord.org 1.安装supervisord Ubuntu: $sudo apt-get install python-setuptool ...
- UWP--页面传值
//匿名对象 private void Button1_OnClick(object sender, RoutedEventArgs e) { , name = "LBI" }); ...
- CSS学习之选择器
html是盖房子,css是将房子装扮的更漂亮一些!CSS(Cascading Style Sheets),值层叠样式表. 语法 选择器 { 属性 : 属性值 ; } 比如, p{color:red;} ...
- Delphi的Hint介绍以及用其重写气泡提示以达到好看的效果
Delphi中使用提示是如此简单,只需将欲使用Hint的控件作如下设置: ShowHint := True; Hint := ‘提示信息’; 不必写一行代码,相当方便. 但有时我们又想自己定制提示的效 ...
- HDFS入门(1)
2015.07.12笔记 1.HDFS Distributed File System(操作系统实现人机交互,最重要的功能是文件管理,使用文件管理系统,windows.Linux文件管理系统有共性:用 ...
- HTML 部分常用属性、组成属性|...超链接、路径、锚点、列表、滚动、URL编码、表格、表单、GET和POST
URL地址 就是我们所说的网址:www.jd.com 浏览器内核,渲染引擎 Ie内核:triteent 谷歌/欧鹏:blink 火狐:gecko 苹果:webkit 渲染引擎是出现兼容性的根本问题 - ...
- TypeScript入门-基本数据类型
▓▓▓▓▓▓ 大致介绍 TypeScript是由C#语言之父Anders Hejlsberg主导开发的一门编程语言,TypeScript本质上是向JavaScript语言添加了可选的静态类型和基于类的 ...
- shell是什么,各种shell的初步认识,适用于初学者
shell是什么?有什么用处?怎么用?我相信,这是大部分人刚接触到shell都有过的疑问.下面小编为大家讲解一下自己的讲解,希望能对大家有所帮助. 什么是shell? shell就是系统内核的一层壳, ...