HTTP学习笔记——token的原理,机制

  • token的原理,机制
  • 什么是token
  • 为什么要使用token
  • 如何使用token
  • token的储存
  • token的加密
  • 结语


token的原理,机制

什么是token

token的意思是“令牌”,更通俗点说其实就是一种通信双方之间的暗号,大家应该都看过谍战片吧,里面地下党接头都免不了说一堆只有他们自己明白,而别人却一头雾水的废话。token其实也是一样的,是当客户端第一次发起请求时,服务器通过签名生成的一连串字符串,这个字符串只有服务器自己明白什么意思,别的人拿到也是一头雾水,甚至连客户端自己都不知道是什么意思。客户端再次发送请求时,一般会将token发在自己的请求头中,服务端收到请求后,会先去验证客户端发送的token是否与自己签发的token一致,如果一致则响应请求,如果不一致则拒绝请求。
说到这里,想必大家已经明白token的作用了吧,说白了其实就是一个身份验证的作用,保证每次客户端发送请求,服务端都知道到底是谁在发送请求。

为什么要使用token

上面写了一大推,很多小伙伴可能会问:为什么要使用token进行身份验证呢?我直接根据用户ID或者账号从数据库进行查询不就知道用户的身份了吗?当然如果你如果只想做个系统自娱自乐,我就自己用,并不想让别用,那么通过数据库查询的方式完全是可以的,但是,一个公司做个项目不可能自娱自乐吧?他们想要赚钱啊,现在这个时代,要赚钱就要靠用户啊,用户越多,赚的钱就越多。假如同时访问一个网站的用户达到十万,百万甚至千万,那么对于每个请求我都去打开数据库访问一遍验证用户身份,那么对于服务器的压力可想而知,为了更好地应对这种高并发的场景,token应运而生。

请求带有token的nginx怎么设置 http请求头token_请求带有token的nginx怎么设置

如何使用token

  1. 用设备号/设备mac地址作为Token(推荐)
    客户端:客户端在登录时获取设备的mac地址,将其作为参数通过请求头传递到服务端
    服务端:服务端接收到该参数后,便用一个变量来接收,同时将其作为token保存在数据库,并将该token设置到session中。客户端每次请求的时候都要统一拦截,将客户端传递的token和服务器端session中的token进行对比,相同则登录成功,不同则拒绝。
    此方式客户端和服务端统一了唯一的标识,并且保证每一个设备拥有唯一的标识。缺点是服务器端需要保存mac地址;优点是客户端无需重新登录,只要登录一次以后一直可以使用,对于超时的问题由服务端进行处理。
  2. 用session值作为Token
    客户端:客户端只需携带用户名和密码登陆即可。
    服务端:服务端接收到用户名和密码后并判断,如果正确了就将本地获取sessionID作为token返回给客户端,客户端以后只需在请求头中携带token参数即可。
    分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。

token的储存

由于token本身具有时效性,如果将token储存在数据中,那么查询数据时间过长会可能会导致token失效,所以一般将token作为变量储存在内存中。

token的加密

token是很容易泄露的,如果不进行加密处理,很容易被恶意拷贝并用来登录。加密的方式一般有:

对称加密存储

在存储的时候把token进行对称加密存储,用到的时候再解密。

sign签名

将请求URL、时间戳、token三者合并,通过算法进行加密处理

注意:在网络层面上token使用明文传输的话是非常危险的,一般不建议将密码之类的敏感信息放在token中,建议使用HTTPS协议。

请求带有token的nginx怎么设置 http请求头token_spring boot_02

结语

本次博客主要介绍了token的一些原理以及token的使用方法,token其实就是一个访问的“令牌”或者可以理解为“暗号”,主要用来验证发送请求的客户端的身份,避免服务端频繁地访问数据库验证客户身份,减轻服务端压力。