hfh215246411 2021-12-03 10:33 采纳率: 90%
浏览 62
已结题

什么是token令牌?

在学习后端的时候,我发现一个问题,那就是我写的接口,不管什么人都可以调用,没有登录也可以调用。那意味着可以通过简单的抓包工具抓出我的接口和参数,然后就可以获取到数据信息,以及什么dos攻击之类的。
总之就是感觉很不安全。于是我想到每个接口都传入用户信息,并且数据库中添加用户的登录状态字段,在执行相关操作之前都查一次数据库用户是否处于登录状态。
但这样一来,会频繁的访问数据库,而且查用户登录状态的代码也需要在每个接口前写一份。我个人觉得不是很合理。于是想到是不是可以在服务端拿到接口请求的入口处进行统一验证。然后就想到听说过的一个名词'token'。
上网一番查证后,发现我的这种问题早就有解决方案了。传统的session验证,现在的token验证。但我没搞明白的是,这些验证和密码验证有什么区别吗?session验证无非是将用户信息存到了session中,减少了数据库的交互,但随之带来也有信息持久化问题,以及session重置问题,看上去不是很好用。
而token验证我更是没有看懂,token信息是将用户信息加密成一段字符串,能加密就能解密,那和用户信息也没啥区别啊。其次,有的文章说token生成后要存储到缓存中,如redis,session啥的,那和session存储有啥区别?多了一层加密?还有的人说token不需要存储在服务端,那我就更不懂了,本质上只要涉及到用户的验证,就离不开存储用户信息,不管是存缓存还是存数据库。token不存储,那你怎么验证用户是当前用户呢?
谁懂的来给我解答一下?

  • 写回答

2条回答 默认 最新

  • love. 2021-12-03 11:03
    关注

    安全验证本来就不应该是长期的,所以用session完全可以的。
    token安全的地方是它可以自动失效,设个时间在时间结束后自动失效,安全性大涨。
    token和session本质上的区别就是:session是每个人一个名字,而token是一个部门共用一个部门名称。比如有一个大门,用session就是每个人都有一个名称这样人一多大门每次都要去数据库中查询名称,这样就反应延迟了;如果用token就是有一款令牌,只要有令牌都可以打开就不用一个一个的去查询数据库那庞大的数据了,只需要一对一比较。
    Redis用来存储密码这些东西还是比较安全的,具体的搞忘了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 12月3日

悬赏问题

  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题