APP开放接口API安全性——Token令牌Sign签名的设计与实现
在APP开放接口API的设计中,避免不了的就是安全性问题。
一、https协议
对于一些敏感的API接口,需要使用https协议。https是在http超文本传输协议加入SSL层,它在网络间通信是加密的,所以需要加密证书。
二、设计签名
原理:用户登录时向服务器提供用户认证信息(如账号和密码),服务器认证完后给客户端返回一个Token令牌,用户再次获取信息时,需带上此令牌。如果令牌正确,则返回数据。
对于获得Token令牌信息后,访问用户相关接口,客户端请求的url需要带上如下参数:
时间戳:timestamp
Token令牌:token
Sign签名:sign
Sign生成规则可以是:将所有用户请求的参数按照字母排序(包括timestamp、token),然后根据MD5(可以加点salt),全部大写,生成sign签名,这就是所说的url签名算法。
然后登陆后每次调用用户信息时,带上sign、timestamp、token参数。
三、具体实现
1、客户端向服务器端发送用户认证信息(如用户名和密码),服务器端接收到请求后,验证用户信息是否正确。
如果正确:则返回一个唯一不重复的字符串(一般为UUID),然后在Redis中维护Token——Uid的用户信息关系,以便其他API对token验证。
如果错误:则返回错误代码。
2、服务器设计一个url请求拦截规则
(a)、判断是否包含timestamp、token、sign参数,如果不含或缺少,则返回错误代码。
(b)、判断服务器接到请求的时间和参数中的时间戳(timestamp)是否相差很长一段时间(时间自定义如半小时),如果超过则说明该url已经过期(如果url被盗,他改变了时间戳,但是会导致sign签名不相等)。
(c)、判断token是否有效,根据请求过来的token,查询Redis缓存中的Uid,如果获取不到这说明token已过期。
(d)、根据用户请求的url参数,服务器端按照同样的规则生成sign签名,对比签名是否相等,如果相等,则放行。(自然url签名,也无法100%保证其安全,也可以通过公钥AES对数据和url加密,但这样无法确保公钥丢失,所以签名只是很大程度上保证安全)。
(e)、此url拦截只需对获取身份认证的url放行(如登录url),其他所有的url都需要拦截。
APP开放接口API安全性——Token令牌Sign签名的设计与实现的更多相关文章
- 【转】App开放接口api安全性—Token签名sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
- App开放接口api安全性—Token签名sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
- App开放接口API安全性 — Token签名sign的设计与实现
在app开放接口API的设计中,避免不了的就是安全性问题. 一.https协议 对于一些敏感的API接口,需要使用https协议. https是在http超文本传输协议加入SSL层,它在网络间通信是加 ...
- App开放接口API安全性之Token签名Sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
- App开放接口api安全性的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证, 那么这就需要用户提供一些信息,比如用户名密码等 ...
- token和sign
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
- 开放接口/RESTful/Api服务的设计和安全方案详解
一.总体思路 这个涉及到两个方面问题:一个是接口访问认证问题,主要解决谁可以使用接口(用户登录验证.来路验证)一个是数据数据传输安全,主要解决接口数据被监听(HTTPS安全传输.敏感内容加密.数字签名 ...
- 开放接口/RESTful/Api服务的设计和安全方案
总体思路 这个涉及到两个方面问题:一个是接口访问认证问题,主要解决谁可以使用接口(用户登录验证.来路验证)一个是数据数据传输安全,主要解决接口数据被监听(HTTPS安全传输.敏感内容加密.数字签名) ...
- 开放数据接口 API 简介与使用场景、调用方法
此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...
随机推荐
- 【BZOJ5074】[Lydsy十月月赛]小B的数字 数学
[BZOJ5074][Lydsy十月月赛]小B的数字 题解:题目是问你ai*bi>=sum,bi>=0这个不等式组有没有解.因为a<=10,容易想到取ai的lcm,然后变成lcm*b ...
- Docker的基本使用(部署python项目)
今天开始利用docker来部署项目,当然,首先,需要安装好Docker,这个在我的上篇中写了 一.准备项目 我写的是一个爬取某ppt网站的代码,就一个ppt1.py是爬虫,然后,ppts是存放下载的p ...
- Ubuntu 16.04 安装 Gnome 桌面环境
个人博客链接:Ubuntu 16.04 安装 Gnome 桌面环境
- netstat -tulpn
[root@d java]# netstat -tulpnActive Internet connections (only servers)Proto Recv-Q Send-Q Local Add ...
- C++之贪吃蛇
#include<iostream> #include<cstdio> #include<cstdlib> #include<ctime> #inclu ...
- logback.xml解读----日志配置解读
初次接触javaweb项目的日志是log4j文件,但是后来发现通过配置logback.xml文件实现日志输出非常好用.经过上午的学习,现总结如下: 直接上配置文件和注释: <?xml versi ...
- TIOBE 9 月排行榜:C++ 式微,第 3 名被 Python 拿下
TIOBE 发布了 9 月份的编程语言排行榜,上个月 Python 与第 3 名擦肩而过,而指数稳步上升的它在本月终于打败 C++,成功探花. “人生苦短,我用 Python”,Python 的经 ...
- nodejs获取参数的方法
1 获取get的querystring参数 GET /test?name=fred&tel=0926xxx572 let aa = req.param("name"); l ...
- sql 区分大小写
sql server默认是不区分大小写的. 要查看sqlserver数据库是否区分大小写,我么可以查看系统存储过程sys.sp_server_info exec sys.sp_server_info ...
- Spark 2.0 PCA主成份分析
PCA在Spark2.0中用法比较简单,只需要设置: .setInputCol(“features”)//保证输入是特征值向量 .setOutputCol(“pcaFeatures”)//输出 .se ...