Android-如何保证API接口数据安全

Android-如何保证API接口数据安全

前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提供的接口来进行业务交互。

网页或者app,只要抓下包就可以清楚的知道这个请求获取到的数据,也可以伪造请求去获取或攻击服务器;也对爬虫工程师来说是一种福音,要抓你的数据简直轻而易举。那我们怎么去解决这些问题呢?

签名规则

1、线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret

2、加入timestamp(时间戳),5分钟内数据有效

3、加入临时流水号 nonce(防止重复提交),至少为10位。针对查询接口,流水号只用于日志落地,便于后期日志核查。针对办理类接口需校验流水号在有效期内的唯一性,以避免重复请求。

4、加入签名字段signature,所有数据的签名信息。

以上字段放在请求头中。

签名的生成

签名signature字段生成规则

所有动态参数 = 请求头部分 + 请求URL地址 + 请求Request参数 + 请求Body

说明:上面的动态参数以key-value的格式存储,并以key值正序排序,进行拼接

最后拼接的字符串 在拼接appSecret

signature =DigestUtils.md5DigestAsHex(sortParamsMap +appSecret)

即拼接成一个字符串,然后做md5不可逆加密。

请求头部分

请求头=“appId=xxxx&nonce=xxxx×tamp=xxxx&sign=xxx”

请求头中的4个参数是必须要传的,否则直接报异常

请求URL地址

这个就是请求接口的地址包含协议,如

https://mso.xxxx.com.cn/api/user

请求Request参数

即请求为Get方式的时候,获取的传入的参数

请求Body

即请求为Post时,请求体Body

从request inputstream中获取保存为String形式

签名算法实现

基本原理其实也比较简单,就是自定义filter,对每个请求进行处理;整体流程如下

1)验证必须的头部参数

2)获取头部参数,request参数,Url请求路径,请求体Body,把这些值放入SortMap中进行排序

3)对SortMap里面的值进行拼接

4)对拼接的值进行加密,生成sign

5)把生成的sign和前端传入的sign进行比较,如果不相同就返回错误

以上是filter类,其中有个appSecret需要自己业务(后端去处理)去获取,它的作用主要是区分不同客户端app。并且利用获取到的appSecret参与到sign签名,保证了客户端的请求签名是由我们后台控制的,我们可以为不同的客户端颁发不同的appSecret。

我们再来看看验证头部参数

上图其实就是验证是否传入值;不过其实有个很重要的一点,就是对此请求进行时间验证,如果大于10分钟表示此链接已经超时,防止别人来到这个链接去请求。这个就是防止盗链。

我们再来看看,如何获取各个参数

上面我们获取了各个参数,相对比较简单;我们在来看看生成sign,和验证sign

上面的流程中,会有个额外的安全处理,

· 防止盗链,我们可以让链接有失效时间

· 利用nonce参数,防止重复提交

总结

今天我们用签名的方式,对我们对外提供的接口起到了保护作用;但这种保护仅仅做到了防止别人篡改请求,或者模拟请求。

但是还是缺少对数据自身的安全保护,即请求的参数和返回的数据都是有可能被别人拦截获取的,而这些数据又是明文的,所以只要被拦截,就能获得相应的业务数据。

Android-如何保证API接口数据安全相关教程

Android暴露api接口,Android-如何保证API接口数据安全相关推荐

  1. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~...

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  2. android调用高德地图接口,调用高德地图Api

    Xml文件 xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map ...

  3. Google Maps API for Android 指南(一)

    概览 Android版Google API 介绍. 通过Android版的Google API,开发者可以基于Google Map的数据开发自己的APP,API将自动连接至Google Map服务器. ...

  4. Google 地图 API for Android

    原文:Introduction to Google Maps API for Android 作者: Eunice Obugyei 译者:kmyhy 从健康类 app Runkeeper 到游戏 ap ...

  5. APP并非一个人在战斗,还有API—Xamarin.Android回忆录

    前言 一般来说,一个客户端APP并非独立存在的,很多时候需要与服务器交互.大体可分为两方面的数据,常规字符串数据和文件数据,因为这两种数据很可能传输方式不一样,比如字符串之类的数据,使用HTTP协议, ...

  6. Android 设备管理API概览(Device Administration API)

    原文:http://android.eoe.cn/topic/android_sdk Android 2.2通过提供Android设备管理API的支持来引入企业应用支持.在系统级的设备管理API提供了 ...

  7. 思考ANDROID架构(4):HOW-TO, 如何从API洞悉软件的话语权

    思考ANDROID架构(4):HOW-TO, 如何从API洞悉软件的话语权 前言:许多人会认为,提供接口(如API),其目的是要去服务别人(如App).然而,这只是一个视角而已,还有许多视角来看待AP ...

  8. api网关 android,如何通过Android上的retrofit2使用Cognito Credentials调用API网关?

    我在我的Android应用程序中使用retrofit2进行任何http / rest调用.现在我需要调用 Amazon AWS API Gateway生成的api. AWS文档say我应该生成客户端代 ...

  9. 面向初学者的带有MVC API的Android 管理表CRUD MSSQL

    目录 介绍 在Android中使用API​​进行表CRUD 屏幕截图示例 第一节 结论 介绍 我的上一篇文章面向初学者的带MVC API的Angular Js Table CRUD MSSQL和使用S ...

最新文章

  1. 如何触发AspxGridview的PageIndexChanged 客户端事件
  2. 配置LNMP遇到的问题(页面空白,不能解析php等)以及fastcgi和php-fom的关系
  3. MariaDB 源码调试
  4. C#绘图工具之Move
  5. java raw types,java – 为Raw Types抛出不一致的ClassCastException
  6. php学籍信息管理系统心得_php实现学生管理系统
  7. win7 virtio 驱动下载
  8. ngrok小米球的使用
  9. http://hi.baidu.com/%BE%C5%CC%EC%C4%A7%CA%DE/blog/item/9b3263626a75ff49ebf8f808.html
  10. MagicBook2018 解决指纹失效
  11. Java反射专题笔记
  12. 单身的程序猿伤不起,在神棍节感慨下
  13. 抖音 触摸精灵_touchscale.co在哪里玩 抖音爆火触摸称重游戏是什么
  14. Springboot书法比赛评分系统毕业设计-附源码200855
  15. 「深度」规模仅为12亿元,充电桩建设真的是朝阳产业吗?
  16. java 别名现象_引用与对象赋值时的别名现象
  17. ThinkPHP3.0主入口配置,注册、登录案例
  18. python爬虫scrapy爬取新闻标题及链接_18Python爬虫---CrawlSpider自动爬取新浪新闻网页标题和链接...
  19. 系统设计原则之里氏代换原则
  20. java爬取王者荣耀全皮肤图片

热门文章

  1. CSS的基本概念和语法规则
  2. 各个地区2.4G及5G信道
  3. 高性能、高可靠分布式文件系统 go-fastdfs v1.2.1 发布
  4. 基于Mac OS系统搭建51单片机开发环境
  5. linux g 编译目录下,你真的了解Linux下gcc编译器的工作过程吗?
  6. NNDL 作业8:RNN-简单循环网络
  7. HTML-frameset框架集
  8. php网络电视,高速度电视直播管理系统 v2.3 门户版
  9. android java与界面的关联_Android Studio安卓学习笔记(三)Android用户界面的设计布局与组件(一)用户界面布局设计(1)...
  10. 处理ssl连接MySQL问题方法