Token学习笔记

Token

Token产生的背景?

在客户端与服务端的交互过程中,客户端频繁地向服务端请求数据,服务端频繁地去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,但是如果总是需要对比用户名和密码,会在一定程度上加大安全问题的隐患,并且频繁的调用数据库,会造成资源的浪费,让程序运行效率变慢,在这样的背景下,Token便应运而生。

Token是什么?

Token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。在开发中,Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

Token的作用?

  1. 使用Token,我们并不需要频繁调用查询数据库,所以使用Token能减轻服务器的压力;
  2. 使用Token,我们不需要频繁传输用户的账号和密码,所以使用Token在一定程度上可以避免出现一些安全问题;

生成Token的方法有哪些?

  1. 用设备号/设备mac地址作为Token(推荐)

    客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。

    服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。

    分析:客户端和服务器端就统一了一个唯一的标识Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的缺点是客户端需要带设备号/mac地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录一次以后一直可以使用,至于超时的问题是由服务器这边来处理,如何处理?若服务器保存的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又重新计时。

  2. 用sessionID值作为Token

    客户端:客户端只需要使用用户名和密码登录即可。

    服务端:服务端收到客户端提交的用户名和密码做判断,如果正确就将本地获取的sessionID作为Token返回给客户端,因为客户端再次请求的时候会带上sessionID,所以客户端以后只需要带上数据请求即可。

    分析:sessionID是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应。tomcat生成的sessionID叫做jsessionid,session在访问tomcat服务器HttpServletRequest的getSession(true)的时候创建,tomcat的ManagerBase类提供创建sessionID的方法:随机数+时间+jvmid;;该方法的缺点在于,当session过期后,客户端必须重新登录才能访问数据;优点是不需要存储数据。

  3. 用自己设定的算法去创建Token,比如使用:

    1. 用户名_UUID作为Token;
    2. JWT(json web token)标准去生成Token;
    3. 第三方工具类如:jjwt-0.9.0.jar生成Token;

    客户端:客户端使用用户名和密码登录,根据不同的Token生成算法提供不同的数据信息。

    服务端:服务端收到客户端提交的用户名和密码做判断,如果正确就将客户端提供的信息通过自己设定的算法生成Token。

    分析:由于生成Token的方法不同,获取数据生成Token、验证Token的方式也不同,对于生成Token算法比较复杂的情况,可能会在生成Token的时候消耗很多资源,但是由于算法复杂,Token不容易被破解;不同的算法,需要的数据也不同,这一点也会造成安全性、运行效率的区别。

验证Token的注意事项?

在验证Token的时候我们需要考虑到以下几个方面:

  1. 根据生成Token的算法,去找到验证Token的方法;
  2. 由于存放Token的位置不同,验证的方式会不一样;
  3. 如果用到了Session,需要考虑Session的有效期;
  4. 如果用到了缓存数据库,需要考虑Token的有效期;

使用Token的基本流程

Token的基本流程大概是这样的:

  1. 客户端使用用户名跟密码请求登录;
  2. 服务端收到请求,去验证用户名与密码;
  3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;
  6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值