上一章节我们学习了cookie和session机制,但是他们都有一些缺点,所有这次我们来了解一个机制---token。
一、cookie和session的缺点
cookie信息存储在客户端浏览器上,安全性较低,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
session中服务器需维护用户的会话状态信息,这导致了服务器资源的占用和开销增加。水平扩展困难。而且如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。
二、什么是token?
1、概念
Token(令牌)是在计算机系统中用于进行身份验证和授权的一种机制。它是一个特定的字符串,用于标识用户、应用程序或其他实体的身份和权限。
2、token验证原理
- 当用户登录系统时,系统会验证用户的凭据(如用户名和密码)。
- 验证通过,然后为该用户颁发一个令牌。这个令牌可以是一个随机生成的字符串,也可以是基于加密算法生成的。令牌通常包含有关用户身份的信息,如用户ID、角色、权限等。
- 此后系统可以在令牌有效时间内,根据令牌中的权限信息来判断用户是否有权进行请求的操作,无需再次带上用户的凭据(如用户名和密码)。
3、token特点
(1)唯一性:每个令牌都是唯一的,用于标识特定的用户或实体。
(2)时效性:令牌通常具有有效期限制,一旦超过有效期,令牌将失效,需要重新进行身份验证。
(3)安全性:令牌可以采用加密算法进行签名,以保证其完整性和安全性,防止被篡改或伪造。
(4)无状态性:令牌是一种无状态的认证方式,服务器不需要在后端维护用户的会话状态,使得服务器更容易扩展和水平扩展。
(5)跨域支持:令牌可以方便地在不同的域名或跨域请求中传递和验证,提供了更灵活的身份验证机制。
4、cookie,session和token的区别
方式 | 存放地方 | 安全性 | 其他 |
cookie | 客户端 | 不安全 | 数量有限制 |
session | 服务器 | 相对安全 | 依赖于Cookie实现 |
token | 客户端 | 相对安全 | 每个请求都有签名还能防止监听以及重放攻击 |