前后端分离如何校验接口调用的合法性

2024-06-16 00:18

本文主要是介绍前后端分离如何校验接口调用的合法性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在前后台数据交互的时候,通过使用给Json添加token验证的方式来保证自己的接口不会被其他人调用并通过在返回字符串中添加token信息和时间戳的方式来保证接口的安全.

token是存放在服务器中的一个以 < K, V > 形式存放的字符串,在用户登录成功后,后台通过以唯一Id为基础(如userId)自动生成随机数的方式生成一个key(如RedisTokenManager.createToken(user.getId()))存放到K中,V则是存放了后台唯一字符串(当前为userId),这样后台就自动生成了一个Token对象,登录成功后每次数据验证都把Token对象放进去以进行校验,此时,还要对token对象进行设置超时时间,当一段时间客户端无响应的时候,服务器会自动清除服务器的token对象,让用户重新登录.

对于前台数据验证:

在前台传到后台数据的时候,除了添加用户名和密码等数据外,还要将token和Timestamp信息也传入到json中一起传到后台,以便于后台信息的校验.

如何保证信息不被泄露:

在传输的过程中通过对数据进行加密验证 , 生成唯一的sign值,当任何人非法修改传递的参数的时候都会导致sign值不匹配从而造成验证失败.因为sign值是MD5加密而且是唯一的,参数修改会导致验证不通过.

1.sign的生成方式:

将传入数据按照某种规则排序,如按照字母顺序排序,然后全部转成大写,我们在做移动端校验的时候会有一个和服务器端相同的密匙,有这两个数据后将密匙添加到转换后的数据前面,然后再对数据进行MD5加密,这样就生成了一个token对象.

2.Timestamp类:

就是将当前的时间传到后台,用来验证数据是否超时,防止数据被盗取,这个是请求超时时间,防止被其他用户获取到地址并进行其他操作.

举例:想要传入如下数据:

http://192.168.239.102:8080/testvideo/getProducts?token=wdeeskfh2376428&b=123&a=entrr&token=wdeeskfh2376428&timestap=1237549754676

我们的密匙是“@#¥213345RTRDG&&”

① 先对传入数据排序:a=entrr&b=123&token=wdeeskfh2376428&timestap=1237549754676
② 对数据大写转换A=ENTRR&B=123&TIMESTAP=1237549754676&TOKEN=WDEESKFH2376428&TIMESTAP=1237549754676
③ 将密匙添加到转换成大写的字符串前方:@#¥213345RTRDG&&A=ENTRR&B=123&TOKEN=WDEESKFH2376428&TIMESTAP=1237549754676&TIMESTAP=1237549754676
④ 进行MD5加密生成sign.将sign放入json中,让后台首先对sign验证.

后台验证流程:

  1. 判断返回参数是否有token,Timestamp,sign 这些参数,如果没有直接返回错误.
  2. 判断此URL是否过期,如果过期返回错误.
  3. 把除了sign的参数进行排序并大写,然后把秘钥拼接再排序之后的请求参数之前进行MD5和传过来的sign值进行比对 如果不一致返回错误.
  4. 根据token 取出来userID,如果取不到,说明token 过期,返回数据,让用户重新登录.
  5. 如果验证通过,则表示返回的数据是安全的,继续进行下一步操作.

这篇关于前后端分离如何校验接口调用的合法性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064986

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET