token储存和安全问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了token储存和安全问题相关的知识,希望对你有一定的参考价值。

参考技术A 1、token存放在localStorage、cookie(http-only)或者内存中;
2、OAuth加密传送;
3、账号密码登录后生成一个随机token,一段时间内可用,绑定userId、常用ip等(不是常用ip时重新登录);
4、用token时有时间限制和功能限制(接口权限分散);
5、使用https;
6、配合使用极验、指纹、人脸等工具;

期间看到一个段子:“建议用脑电波登录”
------希望早日实现

储存与更新 access_token

做微信的项目,一开始就是 access_token 的申请,微信文档上写的比较清楚:

1、为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器。而其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则会造成access_token覆盖而影响业务;
2、目前access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器对外输出的依然是老access_token,此时公众平台后台会保证在刷新短时间内,新老access_token都可用,这保证了第三方业务的平滑过渡

从中可以知道:

  1. 我们要做好 access_token 的储存,且只能储存在一个地方(暂称为A处),需要获取access_token只能从A处获取,如果A处不存在,就重新获取 access_token 并存放到A处。这点是比较好做的,我在只有一台服务器,通过将 access_token 储存到 redis 中作为中控。
  2. 难处理的是这点:access_token覆盖。你不知道什么时候会发生覆盖,可能是别人不小心重新生成了一个 access_token。我之前的做法是,在每次调用 access_token 之前,都向微信发起请求,验证 access_token 是否有效,如果无效,就重新申请一个。但是这样频率过大的话,会被微信服务器拒绝。所以,我现在改成:根据调用结束之后的响应,如果错误码是 access_token 过期相关的,才重新申请新的 access_token,这样又会造成遗漏,所以我又在申请成功后,将当前执行的函数放入队列中。另外,每次都要根据返回判断,然后做出处理,代码重复太多了,应该想办法减少重复

 


以上是关于token储存和安全问题的主要内容,如果未能解决你的问题,请参考以下文章

数字化新业态下数据安全创新——Token化

Token和cookie有啥区别?网络安全实战技巧

JWT-token—前后端分离架构的api安全问题

Firestore 安全规则无法检索 request.auth.token.name

基于JWT的Token认证机制实现及安全问题

android 用啥保存token,保存时需不需要考虑安全问题?