接口的安全性主要围绕 token、timestamp 和 sign 三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看:

Token授权机制:

  用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。

  服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。Token是客户端访问服务端的凭证。

时间戳超时机制:

  用户每次请求都带上当前时间的时间戳 timestamp,服务端接收到timestamp后跟当前时间进行比对,如果时间差大于一定时间(比如5分钟),则认为该请求失效。

  时间戳超时机制是防御DOS攻击的有效手段。

签名机制:

  将 Token 和 时间戳 加上其他请求参数再用MD5或SHA-1算法(可根据情况加点盐)加密,加密后的数据就是本次请求的签名sign,服务端接收到请求后以同样的算法得到签名,并跟当前的签名进行比对,

  如果不一样,说明参数被更改过,直接返回错误标识。签名机制保证了数据不会被篡改。

拒绝重复调用(非必须):

  客户端第一次访问时,将签名sign存放到缓存服务器中,超时时间设定为跟时间戳的超时时间一致,二者时间一致可以保证无论在timestamp限定时间内还是外 URL都只能访问一次。

  如果有人使用同一个URL再次访问,如果发现缓存服务器中已经存在了本次签名,则拒绝服务。

  如果在缓存中的签名失效的情况下,有人使用同一个URL再次访问,则会被时间戳超时机制拦截。

  这就是为什么要求时间戳的超时时间要设定为跟时间戳的超时时间一致。拒绝重复调用机制确保URL被别人截获了也无法使用(如抓取数据)。

流程如下:

1):客户端通过用户名密码登录服务器并获取Token

2):客户端生成时间戳timestamp,并将timestamp作为其中一个参数。

3):客户端将所有的参数,包括Token和timestamp按照自己的算法进行排序加密得到签名sign

4):将token、timestamp和sign作为请求时必须携带的参数加在每个请求的URL后边(http://api.com/users?token=asdsadasd&timestamp=123&sign=123123123)

在以上三中机制的保护下:

  如果有人劫持了请求,并对请求中的参数进行了修改,签名就无法通过;

  如果有人使用已经劫持的URL进行DOS攻击,服务器则会因为缓存服务器中已经存在签名或时间戳超时而拒绝服务,所以DOS攻击也是不可能的;

  如果签名算法和用户名密码都暴露了,那齐天大圣来了估计也不好使吧。。。。

最后说一句,所有的安全措施都用上的话有时候难免太过复杂,在实际项目中需要根据自身情况作出裁剪,比如可以只使用签名机制就可以保证信息不会被篡改,或者定向提供服务的时候只用Token机制就可以了。

如何裁剪,全看项目实际情况和对接口安全性的要求~

待更新....

Java++:安全|API接口安全性设计的更多相关文章

  1. API接口安全性设计

    http://www.jianshu.com/p/c6518a8f4040 接口的安全性主要围绕Token.Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来 ...

  2. 防盗链&CSRF&API接口幂等性设计

    防盗链技术 CSRF(模拟请求) 分析防止伪造Token请求攻击 互联网API接口幂等性设计 忘记密码漏洞分析 1.Http请求防盗链 什么是防盗链 比如A网站有一张图片,被B网站直接通过img标签属 ...

  3. 基于Java的REST架构风格及接口安全性设计的讨论

    1.REST即表现层状态传递(Representational [,rɛprɪzɛn'teʃnl] State Transfer,简称REST). (1)REST名词解释: 通俗来讲就是资源在网络中以 ...

  4. 没想到吧,Java开发 API接口可以不用写 Controller了

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 今天介绍我正在用的一款高效敏捷开发工具magic-api,顺便 ...

  5. API接口TOKEN设计

    首先需要知道API是什么?   API(Application Programming Interface)即应用程序接口.你可以认为 API 是一个软件组件或是一个 Web 服务与外界进行的交互的接 ...

  6. java web api接口调用

    Web Services 被W3C进行了标准化定义. Web Services 发布到网上,可以公布到某个全局注册表,自动提供服务URL,服务描述.接口调用要求.参数说明以及返回值说明.比如中国气象局 ...

  7. 移动APP接口安全性设计

    移动APP接口是怎么保证安全性的,可以采用https,或者是非对称加密. 接口加密的目的是防止被别人用抓包工具,抓包后篡改数据. 关于加密算法常见的有对称加密(DES)和非对称加密(RSA) 对称加密 ...

  8. Java服务器端 API 错误码设计总结

    1.对于API结果返回,定义BaseResult 类 拥有success,errorCode,errorMsg个3个基本参数,success使用Boolean类型,errorCode使用Integer ...

  9. java 调用 api接口

    /* * Copyright 2018 textile.com All right reserved. This software is the * confidential and propriet ...

随机推荐

  1. 填坑!线上Presto查询Hudi表异常排查

    1. 引入 线上用户反馈使用Presto查询Hudi表出现错误,而将Hudi表的文件单独创建parquet类型表时查询无任何问题,关键报错信息如下 40931f6e-3422-4ffd-a692-6c ...

  2. 本地安装并运行http-server、browser-sync、webpack

    有一些自带命令的辅助开发.测试类的工具,官方都推荐全局安装,如果不想全局安装只想在某个项目下用该怎么办呢? 如http-server.browser-sync.webpack这种自带CLI的工具 使用 ...

  3. sobel( ) 算子

    只是简单的使用方面的记录 sobel()算子是图像处理中用于边缘检测的 opencv-python 中的函数形式为 def Sobel(src, ddepth, dx, dy, dst=None, k ...

  4. shiro的使用详解~

    在家无聊复习一下shiro 打开了之前的项目,由于lombok插件安装不了,不知道idea抽什么风所以get,set方法报错了,将就一下 只看shiro的使用,配置在shiro分类中有 登录方法 pa ...

  5. Java 对象的封装,继承,抽象,接口写法

    面向对象的封装写法        关键字 private class A    {        private int a=1;        private void work()         ...

  6. vue 下拉列表动画

    点击可以收起,这里注意先给需要收起展开的的容器设置高度,通过样式v-enter和v-leave-to设置结束和开始前的就可以了

  7. 【C++】VS Code配置

    0.前言 本文已配置C++环境为例,本文主要是面向刚开始接触VS Code的朋友,采用生成默认配置任务的方法,在编写本文过程中大量参考了官方文档,感兴趣的朋友可直接前往传送门. 环境: win10 + ...

  8. 【C++】简介

    注意:以下内容摘自文献[1],修改了部分内容. 前言 关于软件产业发展史,不妨访问“首次全面深度解密华为方舟编译器”一文,不仅详细介绍了软件产业的发展,还有华为方舟编译器产生的背景,值得一看! 1. ...

  9. Java IO(十) BufferedInputStream 和 BufferedOutputStream

    Java IO(十)BufferedInputStream 和 BufferedOutputStream 一.BufferedInputStream 和 BufferedOutputStream (一 ...

  10. Pytorch写CNN

    用Pytorch写了两个CNN网络,数据集用的是FashionMNIST.其中CNN_1只有一个卷积层.一个全连接层,CNN_2有两个卷积层.一个全连接层,但训练完之后的准确率两者差不多,且CNN_1 ...