详解APP的Token验证机制
由于最近负责的一个互联网APP项目中需要用到Token验证机制,所以这边抽空整理下整体流程。
我们知道现在最通用的Token是基于JWT来实现,简单来说其实就是用PublicKey来进行加密,生成的Token里面包含用户Id等信息,但是作为APP这种C/S体系结构来说,存在这样的问题:
1、PublicKey由客户端来存储,涉及版本更新迭代问题,并不好更改PublicKey;
2、各个用户的PublicKey相同,容易被抓包破解;
那如何保证每个用户的加密密钥不一样,后端又能够准确解密呢?
这里需要借助两张表来操作,后面再来一一介绍
1、APP设备备案表
2、APP登录验证票表
接下来开始介绍Token流程
下面为Token获取的整个流程图:
整体流程这里做一下稍微的介绍:
1、进去APP中先获取Android/Ios设备Id,参数如下:
调用后端接口获取appId和appSecret,如果数据库中有数据,则从APP设备备案表中直接获取,如果未存在数据,则往APP设备备案表中存入一条记录,appId和appSecret可以由UUID生成,并返回APP,appId和appSecret在APP做缓存处理,缓存周期可以为一天。
2、app判断本地是否缓存Token,如果没有则调用获取Token接口,参数如下
这里面需要做验证签名安全验证机制处理,验签加密为(uuid+appSecret+timestamp)做md5加密,保证每个用户验签内容不同,如果验证签名通过则生成Token、sessionKey(UUID)、sessionSecret(UUID),并将生成Token、sessionKey、sessionSecret、appId、appSecret等参数存于Redis内,参数如下:
并将Redis生命周期置为8小时(可自定义)。并将Token、sessionKey、sessionSecret返回APP。APP将Token做缓存处理,周期可以为8小时。
3、此时APP已经缓存有Token,调用接口请求数据,后端可以采用AOP或者Interceptor(拦截器)截取请求参数,验证是否有Token,没有则再获取。如果存在Token,验证Redis是否存在authenUserId和authenTicket(登录验证票),如果未存在则返回未登录状态码,APP跳转登录页。
4、登录账户密码以DES加密传输,以获取Token接口返回参数sessionKey和sessionSecret作为DES加密的key和iv,具体如下:
保证每个用户的不一致性加密,后台接口解密操作为:
登录成功后,更新Redis里面authenUserId和authenTicket(登录验证票)字段,往APP登录验证票表新增一条登录数据,记录用户登录记录,authenUserId和authenTicket可以由UUID生产,将authenUserId和authenTicket返回APP,并做缓存化处理。
5、重新请求接口,拦截器根据Token判断Redis里是否存在authenTicket,如果存在authenUserId和authenTicket(登录验证票)则为登陆成功状态,允许请求接口,至此Token流程基本结束。
原文链接: https://blog.csdn.net/u014526891/article/details/82625438
详解APP的Token验证机制相关推荐
- AngularJS 详解Directive(指令)机制
AngularJS 5个实例详解Directive(指令)机制 大漠穷秋 http://damoqiongqiu.iteye.com/blog/1917971 1.一点小说明 指令的作用:实现语义 ...
- linux沙盒机制6,详解Android应用沙盒机制
前言 Android使用沙盒来保护用户不受恶意应用的侵害,同时也将应用隔离开来,防止他们互相访问其数据,本文主要对Android应用沙盒中的几种技术做简要的总结. 一.Android应用DAC沙盒 稍 ...
- java同步异步调用_详解java 三种调用机制(同步、回调、异步)
1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,jsPwwCe它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消 ...
- android增加内置存储分区,详解Android10的分区存储机制(Scoped Storage)适配教程
1. 简介 大家应该都有过这样的体会,手机用着用着里面就充斥着各种不懂的文件夹和文件.甚至是连已经删除的软件的文件夹还存在. 为什么会发生的这样的问题呢? 因为google的缺席,导致android生 ...
- easyui js解析字符串_js相关:详解Jquery Easyui的验证扩展
js相关:详解Jquery Easyui的验证扩展 发布于 2020-7-2| 复制链接 本文主要介绍了Jquery Easyui验证扩展,Easyui验证,Easyui校验,js正则表达式.具有一定 ...
- php字段验证规则,详解ThinkPHP中自动验证及验证规则
本篇文章详细介绍了thinkphp中自动验证及验证规则的方法,希望对学习thinkphp的朋友有帮助! 详解ThinkPHP中自动验证及验证规则 ThinkPHP 内置了数据对象的自动验证功能来完成模 ...
- Cron表达式详解和表达式的验证
Cron表达式详解和表达式的验证 本篇不算原创,因为主要内容来自网上的博客,所以给出我参考文章的链接. 本文cron表达式详解的大部分内容参考了[cron表达式详解]和Quartz使用总结.Cron表 ...
- java阴阳师抽卡算法_阴阳师详解新的抽卡机制 全图鉴和SP获取更加简单
原标题:阴阳师详解新的抽卡机制 全图鉴和SP获取更加简单 阴阳师随着大岳丸活动的临近,马上大家就要再次进入抽卡的热潮中了,而这次的新SSR大岳丸的获取,又一次更新了新的抽卡机制,本次就带来新抽卡机制详 ...
- 微信回调 java_详解APP微信支付(java后台_统一下单和回调)
1.微信配置信息 global.properties 2.方法wxpay用于生成预支付订单信息 方法notifyWeiXinPay用于微信支付成功后的回调, 注意: 在手机端使用微信支付成功后,微信服 ...
最新文章
- YOLOv4官方改进版来了!指标炸裂55.8% AP!Scaled-YOLOv4:扩展跨阶段局部网络
- spring整合springmvc和mybatis
- Mac OS 如何连接windows 文件共享
- oracle语句怎么倒退,oracle RETURNING 子句使用方法
- OpenCV消除傅立叶域中的周期性噪声的实例(附完整代码)
- 使用阿里云火车票查询接口案例——CSDN博客
- 第二轮冲刺-Runner站立会议08
- execjs执行报: ‘gbk‘ codec can‘t decode byte 0xac in position 62: illegal multibyte sequence
- 私藏的开发过程中的那些基类
- 710. Random Pick with Blacklist - LeetCode
- C# 设置Windows程序窗口为穿透状态
- ashx比较完美的权限处理(适合页面,不适合安卓远程读取接口)
- ROS install
- 电梯仿真模拟,电梯模拟运行,电梯仿真运行,基于西门子博图S7-1200plc与触摸屏HMI的电梯模拟仿真控制系统设计
- sql语句练习50题(经典)
- python复数类型的虚部通过什么表示_Python小白必备知识:Python复数类型(complex)详解...
- 数据结构算法——1097. Hub Connection plan
- 2014年的暑假ACM之旅!
- joda-time 文档的部分翻译
- [presto(trino)]多种日期写法