如何保证token的安全

简介: 如何保证token的安全Token 授权机制时间戳超时机制签名机制IP 限制拒绝重复调用 (非必须)整个流程如下:在以上三种机制的保护下,

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


0.jpg

Token 授权机制


用户使用用户名密码登录后服务器给客户端返回一个 Token(通常是 UUID),并将 Token-UserId 以键值对的形式存放在缓存服务器中。服务端接收到请求后进行 Token 验证,如果 Token 不存在,说明请求无效。Token 是客户端访问服务端的凭证。



时间戳超时机制


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


签名机制


将 Token 和 时间戳 加上其他请求参数再用 MD5 或 SHA-1 算法 (可根据情况加点盐) 加密,加密后的数据就是本次请求的签名 sign,服务端接收到请求后以同样的算法得到签名,并跟当前的签名进行比对,如果不一样,说明参数被更改过,直接返回错误标识。签名机制保证了数据不会被篡改。


IP 限制


防止 token 被截取后在别的网络环境发出请求,在服务器通过请求 ip 与这个 ip 必须对上才能解密


拒绝重复调用 (非必须)


客户端第一次访问时,将签名 sign 存放到缓存服务器中,超时时间设定为跟时间戳的超时时间一致,二者时间一致可以保证无论在 timestamp 限定时间内还是外 URL 都只能访问一次。如果有人使用同一个 URL 再次访问,如果发现缓存服务器中已经存在了本次签名,则拒绝服务。


如果在缓存中的签名失效的情况下,有人使用同一个 URL 再次访问,则会被时间戳超时机制拦截。这就是为什么要求时间戳的超时时间要设定为跟时间戳的超时时间一致。拒绝重复调用机制确保 URL 被别人截获了也无法使用 (如抓取数据)。


整个流程如下:


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


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


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


4、将 token、timestamp 和 sign 作为请求时必须携带的参数加在每个请求的 URL 后边 (http://url/request?token=2021×tamp=2021&sign=20212021)


5、服务端写一个过滤器对 token、timestamp 和 sign 进行验证,只有在 token 有效、timestamp 未超时、缓存服务器中不存在 sign 三种情况同时满足,本次请求才有效


在以上三种机制的保护下,


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


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


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


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


1.jpg


目录
相关文章
|
JavaScript 前端开发 应用服务中间件
Vue项目如何进行部署?是否有遇到部署服务器后刷新404问题?
Vue项目如何进行部署?是否有遇到部署服务器后刷新404问题?
418 0
|
5月前
|
数据库
六大常用地震数据库,地震波库特点及选波建议
本文综述全球六大强震动数据库(PEER、USGS、K-NET、ITACA、TR-NSMN、GeoNet)的发展背景、数据特点与分布特征,对比其台站布局、时间覆盖与地震参数,分析适用场景,为地震工程研究中的数据选取提供参考。
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
量子计算作为革命性的计算范式,凭借量子比特和量子门的独特优势,展现出在大数据处理中的巨大潜力。本文探讨了量子计算的基本原理、在大数据处理中的应用及面临的挑战与前景,展望了其在金融、医疗和物流等领域的广泛应用。
|
JavaScript C++
以 Vue 3 项目为例,你是否经常遇到 import 语句顺序混乱的问题?要想解决它其实很容易!
以 Vue 3 项目为例,你是否经常遇到 import 语句顺序混乱的问题?要想解决它其实很容易!
|
Ubuntu Linux Shell
10-23|如何查看linux当前时间
10-23|如何查看linux当前时间
|
算法 安全 测试技术
【传知代码】图像加密解密与数字水印处理-论文复现
该文主要介绍了图像加密解密和数字水印处理的重要性,并提供了相关技术的概述和原理。文章首先强调了信息安全和数据保护在数字化时代的需求,然后分别介绍了图像加密和解密以及数字水印处理的概念。 在图像加密解密部分,提到了两种方法:基于混沌Logistic映射的加密和基于三重DES的加密。前者通过混沌理论进行加密,后者使用经典的三重DES算法。文章提供了每种方法的基本原理,并展示了如何在Python中实现它们,包括使用`cryptography`库进行AES加密和利用PIL库进行图像处理。
506 0
【传知代码】图像加密解密与数字水印处理-论文复现
|
存储 数据库 索引
faiss 三种基础索引方式
faiss 三种基础索引方式
1095 1
|
缓存 负载均衡 算法
【Nginx】Nginx 负载均衡
【1月更文挑战第25天】【Nginx】Nginx 负载均衡
|
XML 存储 JSON
多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)
如何将数据库中的层次数据转换成对应的层次结构的JSON或XML格式的字符串,返回给客户端的JavaScript树形组件?这就是我们要解决的关键技术问题。
多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)
|
缓存 IDE 前端开发
Spring Boot 开发环境热部署(HotSwap)详解
前言 Spring Boot 提出了多项开箱即用的功能特性,但归根到底还是围绕简化应用的创建、开发、运行。开发环境下我们经常对项目代码进行变动,如果每次都重新启动应用会浪费我们大量时间,为此就产生了多种进行热部署的方案,可以在不重启的情况下使用新的代码。
1092 0
Spring Boot 开发环境热部署(HotSwap)详解

热门文章

最新文章