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

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

相关文章

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

spring 参数校验Validation示例详解

《spring参数校验Validation示例详解》Spring提供了Validation工具类来实现对客户端传来的请求参数的有效校验,本文给大家介绍spring参数校验Validation示例详... 目录前言一、Validation常见的校验注解二、Validation的简单应用三、分组校验四、自定义校

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代