用户在访问无服务器时,通常会有多次请求和响应,而HTTP协议是一种无状态协议,所以每次请求响应之间都是相互独立的。也就是说服务器无法判断两个请求是否来自同一个用户。
这样就会出现一些问题,例如用户在访问服务端时,第一次访问需要登录,成功登陆后获取到了响应,但当你下一次访问时,由于服务端不认识你,没有存储你的登陆信息,所以依旧需要登录验证,每次请求都需要重新进行登录,这样既降低了应用程序的性能也影响了用户体验。
这时候我们就需要在用户成功登陆之后,实现后续访问的身份认证。
如何实现身份验证?
常用以下两种方式。
1、Token
Token是一种验证用户身份的方式,可以理解为一块身份令牌,表示持有者的合法身份。
在Web应用程序中,Token通常是一个字符串,它包含了用户的信息和一些加密信息,常用于验证用户的身份和权限。Token的使用可以避免在每次请求时都需要进行用户身份验证,从而提高Web应用程序的性能,同时解决用户每次访问都需要登录的问题。
特点
(1)Token是一种无状态的验证方式,不需要在服务器端保存用户的会话状态。
(2)Token通常会设置有效期,过期之后需要重新生成。
(3)为了提高安全性,Token在生成后会使用加密算法进行加密操,再将加密后的Token发送给客户端,后续请求中服务器在获取Token后,会使用对应的解密算法进行解密验证。
(4)Token可以携带用户的信息,例如用户ID、角色等,方便服务器进行身份和权限验证。
2、Session对象实现身份验证
利用Session对象,也可以实现用户身份验证操作。
原理是在用户登录服务器后,将用户登录信息存储在服务端的Session对象中,之后将Session对象的ID通过Cookie保存到客户端,在后续的请求中,就会携带Session对象ID,服务端通过Session对象的ID,查找对应的Session对象,从中获取用户的身份信息后进行验证。
特点
(1)由于Session对象存储在服务器,所以会占用一定的服务器资源。
(2)数据存放在服务器,安全性高,但Session对象ID存储在浏览器,容易泄露。
(3)可以设置Session对象的有效期,减少长期未使用带来的服务器资源消耗。
小结
两种方式对比来说,使用Token的方式会更好,因为不管有几个用户,在登录服务器之后都会获取到各自的Token。后续访问时,只需要验证Token合法性,不需要在服务器中再存储用户身份信息,减少了服务器资源的占用。
Token是一种加密的身份信息凭证,可以有效防止用户身份信息的泄露,数据安全性也更好。
同时,Token还支持单点登录,用户在服务器中登录一次之后,服务器中的多个项目共享登录状态,Session方式则不具备,因为每个项目的Session对象都是独立的,互不影响。