什么是Token?Token的优点有哪些?
众所周知,Token(令牌)是在服务器上生成的。如果前端使用用户名/密码向服务器请求认证,服务器认证成功,那么服务器会将令牌返回给前端,前端每次请求都可以带上令牌证明自己的合法身份。如果此令牌持续存在于服务器端(例如,存储在数据库中),则它是一个永久的身份令牌。因此对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中只是知道有这个东西,但却不知道Token的优点有哪些?更不知道什么是Token?今天小编就带大家一起分析分析这东西。
什么是Token?
Token是用户身份的认证方式,通常叫它:“令牌”。当用户第一次登录后,服务器生成一个Token并将其返回给客户端,以后客户端只需带上这个令牌前来请求数据即可,就无需再次带上用户名和密码。
认证流程:
1, 客户端使用用户名和密码请求登录;
2, 服务端收到请求,去验证用户名与密码;
3, 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
4, 客户端收到 Token 以后可以把它存储起来,比如放在 里或者 Local Storage 里;
5, 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;
6, 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据;
总的来说就是客户端在首次登陆以后,服务端再次接收http请求的时候,就只认token了,请求只要每次把token带上就行了,服务器端会拦截所有的请求,然后校验token的合法性,合法就放行,不合法就返回401(失败)。
Token的优点有哪些?
1.token(令牌)完全由应用程序管理,因此可以避免同源策略。(Cookie不允许跨域访问,且令牌不存在)
2.令牌可以避免CSRF攻击(也因为不需要cookie)
3.令牌可以是无状态的,并且可以在多个服务之间共享。
4.令牌支持手机访问(Cookie不支持手机访问)
服务器只需要解密浏览器发来的令牌值,解密后查询用户数据。如果查询成功,它将被认证。因此,即使有多个服务器,服务器也只是解密令牌和查询用户数据,不需要在服务器上保存用户的认证信息或会话信息,这意味着基于令牌认证机制的应用不需要考虑用户登录哪个服务器,为应用扩展提供了便利,解决了可扩展性的弊端。