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