打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
详解APP的Token验证机制

详解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流程基本结束。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
IOS 中使用token机制来验证用户的安全性
thinkphp在app接口开发过程中的通讯安全认证
微信开发-API未测试
网站应用微信登录
网站集成QQ、新浪账号登陆
说一说几种常用的登录认证方式,你用的哪种?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服