token详解
前言
本篇博客主要从什么是token?为什么要使用token?如何使用token?项目实例这几个方面讲解token,通过本篇博客能够对token能够有更深入的理解,并且有思路应用在具体项目中。
什么是token?
Token 在计算机身份认证中是令牌的意思,表示执行某些操作的权利的对象。通俗的意思是token是身份的象征,有了这个token了你就能有权利做些什么事。
token是在服务器端产生,如果前端使用用户名密码向服务端请求认证,服务端认证成功,那么服务端就会返回Token给前端。前端可以在每次请求的时候带上Token来证明自己的合法地位。
为什么要使用token?
- 从上面token的定义中我们可以看出token可以进行用户身份鉴权认证。
- 提高安全性:Token可以防止未经授权的用户访问受限资源。使用Token进行身份验证和授权可以避免传统的基于Cookie和Session的身份验证方式带来的一些安全风险,例如CSRF攻击和会话劫持等。
- 减少服务器负担:使用Token可以减轻服务器的负担,因为服务器无需保存用户的身份信息和状态信息。相反,每次请求中都包含了Token,服务器只需要对Token进行验证即可判断用户的身份和权限。
- 提高性能:使用Token可以减少网络传输和服务器的负载,因为Token可以被存储在客户端,客户端在每次请求时将Token带到服务器,而不需要每次请求都要传递身份信息和状态信息。
那么如何使用token呢?
使用Token进行身份验证和授权的过程
- 用户提供用户名和密码进行登录。
- 服务器验证用户名和密码的正确性,如果验证通过,则生成一个Token,并将Token返回给客户端。
- 客户端保存Token,并在以后的每次请求中都将Token携带到服务器。
- 服务器在接收到请求时,会对Token进行验证,以确定该请求是否被授权。
- 如果Token验证通过,则服务器处理请求,并返回所请求的资源或操作的结果。
- 如果Token验证失败,则服务器返回一个未授权的错误响应,客户端需要重新进行身份验证或者刷新Token。
具体步骤
- 生成Token:服务器在用户登录成功后,会生成一个Token,并返回给客户端。Token一般是一串加密的字符串,包含用户的身份信息和权限信息等。
- 保存Token:客户端在接收到Token后,需要将其保存在本地,以便后续的请求中携带Token。
- 携带Token:客户端在每次请求时,需要在请求头中携带Token,以便服务器进行验证。
- 验证Token:服务器在接收到请求时,需要从请求头中获取Token,并进行验证。如果Token验证通过,则处理请求,否则返回错误响应。
- 刷新Token:为了避免Token被恶意攻击或过期,客户端需要定期刷新Token,可以在Token即将过期时,向服务器发送刷新Token的请求,以获得新的Token。
项目上如何运用的token
列举的是目前公司使用token进行用户身份鉴权的大致流程:
token过期了什么办?
Token续活
目前项目中的Token续活方式,当前在redis设置token的过期时间为24分钟(根据项目业务的使用情况进行制定的),从前端来的每一次请求都在网关处对token进行续活,只要这个token还没有过期就会一直更新它的过期时间。如果某一次来的http请求间隔时间超过了24分钟,那么这个时候token已经过期了,无法进行续活。前端会重定向到登陆页面提示用户进行登陆。
总结
在使用Token进行身份验证和授权时,Token通常是存储在HTTP请求头中的,如果使用HTTP协议进行通信,那么Token就会被以明文的形式传输,容易被窃取或篡改,从而导致安全风险。而使用HTTPS协议,可以保证Token在传输过程中被加密,并且客户端和服务器的身份都经过了身份验证,从而有效地防止了中间人攻击和窃听等安全风险。
HTTPS协议可以通过使用SSL或TLS等安全协议,在客户端和服务器之间建立一条安全的加密通道,使得通信过程中的数据在传输过程中被加密,从而保证数据的机密性。同时,HTTPS协议还可以使用数字证书进行身份验证,确保客户端和服务器的身份都是可信的,从而保证身份的合法性和完整性。
升华
多角度看问题,多个维度看问题能够更加深入的理解和学习到该知识点。例如5w2h的方式。