先总结一下现阶段网站开发中网络安全登录方面的几种架构。本人擅长的是JAVA语言的,所以文章中大部分写的java方面的相关技术。
第一种:前后端不分离的模式,像以前的spring+jsp、还有现在还有很多用户的spring+模板等。登录模式采用的是session存储登录信息。常用的安全框架主要有shiro,security。前端cookie中存储后端返回的sessionid,后端服务通过判断cookie中的sessionid判断用户的登录状态。
第二种:前后端分离模式。像springboot+vue,springboot+react,springboot+angular等都是属于这种前后端分离的模式。前后端分离之后,后端服务没法像之前一样直接获取token信息,只能通过异步请求的方式,将token传入服务端进行验证。这种模式前后端通过token进行交互,通过token记录用户登录状态。
前后端分离模式验证token又分几种情况:
- jwt模式(全称JSON WEB TOKEN),也就是一种token的实现形式,放在前端就是一串加密的字符串,jwt字符串在用户登录请求接口的时候,由后端服务通过密钥以及一些用户权限信息生成的token返回给前端,前端cookie,或者storage中存储token,在后边的请求中都带着这个token去请求后端服务的需要安全认证的接口。后端会通过这个token进行验证,验证是通过对应的解密方式解密token,然后验证token是否过期是否伪造。这里是重点,服务端不存储token信息,只有一套加密解密操作,进行jwt token的验证。
- token+redis的模式。跟第一点一样。不同的是,这里的token可以是一串不含任何信息的唯一性字符串,然后,用户登录的时候生成token,并且在redis缓存服务器中以key,value加过期时间的方式进行存储,这里一般会把用户信息也放入进来,最后把token返回给前端,用户后边掉用接口的时候,后端服务通过这个token从redis中取数据进行token的验证。
- jwt+token+redis模式。通过前面的描述,前两种方式虽然有不同点,但是两者完全可以结合使用。redis的灵活过期时间,jwt的无状态设计。另,需要注意的是redis只是一个缓存数据库,token可以直接存储在数据库中,通过其他方式比如记录token的生成时间,判断token是否过期。
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。