前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >api接口的安全设计:使用token+sign+时间戳

api接口的安全设计:使用token+sign+时间戳

原创
作者头像
炒香菇的书呆子
发布于 2023-10-03 15:46:55
发布于 2023-10-03 15:46:55
2.5K0
举报

服务端以api的方式将数据响应给客户端是目前的趋势,可以用在前后端分离的架构中,前后端分离之后,前后端人员能够更加专注于自己板块的东西,也可以用在服务端与服务端相互调用中。

拿到接口后,客户端就可以通过api获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口来获取数据,因此我们的api接口就要使用安全验证。

一、使用token进行用户身份认证

用户身份认证的流程图如下:

20210124164442864.png
20210124164442864.png

具体说明如下:

①、用户登录时,客户端请求接口,传入用户名和密码

②、服务端对用户身份进行验证。若验证失败,则返回错误结果;若验证通过,则生成一个随机不重复的token,并将其存储在redis中(假设我们以存在redis中为例,也可以存储在DB中,存储在哪里具体看自己即可),设置一个过期时间。其中,redis的key为token,value为验证通过后获得的用户信息。

③、用户身份校验通过后,后台服务将生成的token返回客户端。客户端请求后续其他接口时,需要带上这个token。服务端会统一拦截接口请求,进行Token有效性校验,并从中获取用户信息,供后续业务逻辑使用。

二、使用sign防止传入参数被篡改

为了防止中间人攻击(客户端发来的请求被第三方拦截篡改,或接口被不信任的第三方进行调用),引入参数的签名机制

具体步骤如下:

①、客户端和服务端约定一个加密算法(比如 md5加密 或 sha1加密 或 先md5加密后再sha1加密......等双方自行协商加密算法方式即可), 客户端发起请求时,将所有的非空参数按升序或降序拼接在一起,通过加密算法形成一个sign,并将其放在请求中一起传递给服务端。

②、服务端统一拦截接口请求,用接收到的非可空参数根据约定好的规则同样进行加密,和客户端传入的sign值进行比较。若一致则予以放行,提供接口对应的数据,若不一致则拒绝客户端的请求。

由于中间人不知道加密方法,也就不能伪造一个有效的sign。从而有效防止了中间人对请求参数的篡改或防止了其它不被我们信任的第三方调用接口。

2021012417375499.png
2021012417375499.png

三、用时间戳防止暴力请求

sign机制可以防止参数被篡改,但无法防ddos攻击(第三方使用正确的参数,不停的请求服务器,使之无法正常提供服务)。因此,还需要引入时间戳机制。

具体的操作为:客户端在生成sign值时,除了使用所有的参数和token外,再加一个发起请求时的时间戳。即:

代码语言:txt
AI代码解释
复制
sign值来源 = 所有非空参数升序排序(或 降序排序)+token+timestamp

而服务端则需要根据当前时间和sign值的时间戳进行比较,差值超过一段时间则不予通过客户端的请求,直接给客户端响应某些错误提示等。

若要求不高,则客户端和服务端可以仅仅使用精确到秒或分钟的时间戳,据此形成sign值来校验有效性。这样可以使一秒或一分钟内的请求是有效的。

若要求较高,则还需要约定一个解密算法,使服务端可以从sign值中解析出发起请求的时间戳。

总结后的流程图如下:

123.png
123.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
App开放接口API安全性—Token签名sign的设计与实现
https是在http超文本传输协议加入SSL层,它在网络间通信是加密的,所以需要加密证书。
lyb-geek
2022/03/09
2K0
App开放接口api安全性—Token签名sign的设计与实现
在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等,但是为了安全起见让用户暴露的明文密码次数越少越好,我们一般在web项目中,大多数采用保存的session中,然后在存一份到cookie中,来保持用户的回话有效性。但是在app提供的开放接口中,后端服务器在用户登录后如何去验证和维护用户的登陆有效性呢,以下是参考项目中设计的解决方案,其原理和大多数开放接口安全验证一样,如淘宝的开放接口token验证,微信开发平台token验证都是同理。
全栈程序员站长
2022/07/07
1.6K0
标准API接口设计规范
在设计和实现API接口时,我们经常需要处理一些敏感数据,例如用户的登录密码、银行卡号、身份证号码等。这些信息若以明文形式在网络上传输,将面临极大的安全风险,容易受到恶意监听和数据泄露的威胁。
Tinywan
2024/06/04
3100
标准API接口设计规范
Retrofit/Okhttp API接口加固技术实践(上)
对于Retrofit安全相关的刚开始就写了一篇《Retrofit 2.0 超能实践(一),okHttp完美支持Https传输》(http://blog.csdn.net/sk719887916/article/details/51597816) 文章介绍了怎么使用Retrofit,并且在遇到okhttps的使用方式,但对于加密我们还是无法了解太多,对于安全性要求很高的接口场景还是无法满足,今天就来介绍下对普通api参数的加密!
开发者技术前线
2020/11/23
6550
Retrofit/Okhttp API接口加固技术实践(上)
API接口TOKEN设计
首先需要知道API是什么? API(Application Programming Interface)即应用程序接口。你可以认为 API 是一个软件组件或是一个 Web 服务与外界进行的交互的接口。而我们在这里要谈论的,是作为一家公司如何跟外界进行交互。从另一个角度来说,API 是一套协议,规定了我们与外界的沟通方式:如何发送请求和接收响应。 API的特点: 1、因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效; 2、因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的
wangxl
2018/03/09
5.4K0
公司来了个大神,三方接口调用方案设计的真优雅~~
在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题。
程序员蜗牛
2024/04/22
2.2K0
公司来了个大神,三方接口调用方案设计的真优雅~~
API接口设计规范
说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢?
Java旅途
2020/07/17
2.8K0
企业API接口设计(token、timestamp、sign)之具体实现
Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, key用于参数签名使用,注意key保存到客户端,需要做一些安全处理,防止泄露。
lyb-geek
2019/11/30
2.9K0
API接口设计:防参数篡改+防二次请求
API接口由于需要供第三方服务调用,所以必须暴露到外网,并提供了具体请求地址和请求参数
肖哥哥
2018/08/02
13.4K3
接口的安全设计要素:ticket,签名,时间戳
与前端对接的API接口,如果被第三方抓包并进行恶意篡改参数,可能会导致数据泄露,甚至会被篡改数据,我主要围绕时间戳,token,签名三个部分来保证API接口的安全性
二哥聊运营工具
2021/12/17
5040
接口的安全设计要素:ticket,签名,时间戳
大厂案例 - 通用的三方接口调用方案设计(上)
在为第三方系统提供接口时,关键是确保数据的完整性、安全性和防止重复提交。以下是一个基于API密钥(Access Key/Secret Key)和回调机制的设计方案,具有多层次的安全保障。
小小工匠
2024/05/26
3.8K0
大厂案例 - 通用的三方接口调用方案设计(上)
开放式API安全防护的七大原则
在我们日常工作程序开发过程中,难免会涉及与第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(即防窃取)?
架构精进之路
2021/01/21
3.3K0
API接口安全性设计
最近在做毕设嘛,这一块以前从来没有关注过,这不是大学阶段最后一个学生项目了嘛,使劲的折腾,不断的翻新。对,业务层接口经过我一天半的努力已经全部交付给客户端了,不过我改主意了,我要返厂重做,在不影响客户端联调的前提下。
看、未来
2021/10/20
8400
安全|API接口安全性设计(防篡改和重复调用)
API接口的安全性主要是为了保证数据不会被篡改和重复调用,实现方案主要围绕Token、时间戳和Sign三个机制展开设计。
黄小怪
2018/12/07
10K0
如何设计一个牛逼的API接口(技术创作101训练营)
在日常开发中,总会接触到各种接口。前后端数据传输接口,第三方业务平台接口。一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护。这篇文章重点讨论一下提供给第三方平台的业务接口应当如何设计?我们应该考虑哪些问题?
Java旅途
2020/09/21
1.3K0
如何设计一个牛逼的API接口(技术创作101训练营)
阿里大师带你详解API接口安全
接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看:
Java_老男孩
2019/06/20
1.6K0
探讨三方接口调用方案设计
三方接口设计是实现系统功能的关键环节。设计一个安全、高效且易于维护的接口调用方案,对于保障系统稳定性、数据安全性和用户体验至关重要。
公众号:码到三十五
2024/11/25
1920
如何保证API接口安全?
在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接、微信支付对接、高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司api接口。
纯洁的微笑
2021/07/01
1.6K0
如何保证API接口安全?
如何保证API接口安全?
在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接、微信支付对接、高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司api接口。当你的公司体量上来了时候,这个时候可能有一些公司开始找你进行技术对接了,转变成由你来提供api接口,那这个时候,我们应该如何设计并保证API接口安全呢?
老K博客
2024/12/10
1680
如何保证API接口安全?
十种接口安全方案!!!
日常开发中,如何保证接口数据的安全性呢?接口数据安全的保证过程,主要体现在这几个方面:一个就是数据传输过程中的安全,还有就是数据到达服务端,如何识别数据,最后一点就是数据存储的安全性。介绍下保证接口数据安全的10个方案。
绿毛龟
2024/01/19
8750
十种接口安全方案!!!
相关推荐
App开放接口API安全性—Token签名sign的设计与实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文