当前位置: 首页 > Web前端 > HTML

基于令牌的用户认证

时间:2023-04-02 15:22:19 HTML

用户认证用户认证是互联网服务中的一个重要过程,决定着服务的安全性。生活中靠的是身份证,上网靠的是账号和密码。作为无状态协议,HTTP没有办法记住用户的登录状态。因此,我们需要通过一些手段来判断用户的登录状态,从而判断用户是否有操作权限。用户认证:传统的Session用户认证Token-based用户认证Session-based用户认证早期的互联网使用Cookie(客户端)和Session(服务器)来记录和认证用户信息。Session和Cookie都是用来记录一系列状态的。不同的是Session记录在服务器端,而Cookie记录在客户端。认证过程:用户将用户名和密码发送给服务器。服务器通过认证后,在当前会话(session)中保存相关数据,如用户角色、登录时间等。服务器返回一个session_id给用户,写入用户的Cookie中。用户后续的每次请求都会将session_id通过cookie传回服务器。服务端收到session_id,找到前段时间保存的数据,从而知道用户的身份。缺点Session需要存在于服务器内存中,不能跨实例共享。当下一个请求被分派到另一个实例时,需要重新登录。在高并发的情况下,Session需要放在内存中,受限于服务器内存的大小。Token只需要在服务端进行解析验证即可。Session依赖于浏览器的cookie机制,部分软件和手机客户端难以支持。而且Token不仅在web端,在移动端也有很好的支持。由于各种限制,现在广泛使用基于Token的用户认证。基于token的用户认证token是登录后服务器返回的加密字符串(有多种加密算法),存储在本地。客户端向服务器请求数据时,可以包含(放在请求的header中,所有参数都可以)。以下只是想法。认证过程当用户登录成功后,服务器端会通过指定的算法生成一个token,将token存储在redis中,然后将token值返回给客户端。客户端将令牌存储在localstorage或sessionstorage中(小程序可以存储在app.global中)。客户端调用接口请求数据时,携带token值发送给服务端。服务端收到客户端的请求后,首先会解析返回的token获取用户信息验证,并取出token值与redis中存储的token值进行比较。如果token比对成功,说明用户处于登录状态,否则登录状态无效,用户需要重新登录。用户每次再次登录,都会刷新token的过期时间。