本发明涉及计算机软件技术领域,具体地说是一种基于json验证码的安全认证拦截的方法。
背景技术:
在分布式环境下的应用,资源访问的安全性非常重要,如果系统资源可以不经登录就可以直接访问,那么系统内的资源随时有泄露的危险,造成不可估量的损失。另外,在分布式环境下,对用户行为进行安全认证拦截,性能要求会更高。我们在保证信息安全的同时,也必须保证安全审计不会造成性能压力,以提高安全审计的效率。
传统的安全认证拦截方式,都是需要依赖session来存储用户的id和上下文信息,需要占用大量服务器内存。通过检测session是否已经存在来判断用户是否已经登录。在分布式环境下,会有海量用户同时在线,包含大量的用户信息的session数据很快会把服务器内存耗尽,容易造成宕机。因此,session模式并不适用于同时有海量在线用户的分布式环境。基于此,现提供一种基于json验证码的安全认证拦截的方法,通过采用json验证码的方式,是无状态的,将存储的压力分散到了各个客户端中,防止用户在没有登录系统的情况下,直接访问系统资源,并且不占用服务器资源,不影响访问效率。
技术实现要素:
本发明的技术任务是针对以上不足之处,提供一种基于json验证码的安全认证拦截的方法。
一种基于json验证码的安全认证拦截的方法,其实现过程为:首先将系统内所有的访问链接都视为系统的资源,只有成功登陆的用户,才可以访问,未登录的用户不能访问;在成功登录后,给用户授予一个json验证码,当用户访问系统资源时,用户的每个访问请求都附上该json验证码,即没有json验证码、或者是json验证码过期的访问请求,均认定为非法请求,不授予权限。
用户登录时获取json验证码的过程为:
当用户在客户端登录时,客户端向后台的服务端发送用户名和密码,且密码传输时进行加密;
服务端在用户名密码验证通过后,查看缓存中是否有用户信息,如果没有则访问数据库得到用户信息;
然后将用户的信息保存在可信的服务端缓存中;
服务端将用户信息传给验证码生成器,为该用户创建一个经过加密的json验证码。
用户获取的json验证码保存在客户端的浏览器cookie中,该cookie中不保存用户信息,用户的信息保存在服务端,即该cookie为验证码的储存地址。
基于上述验证码,用户访问系统资源的过程为:
当用户发出访问请求时,从cookie中取出验证码,添加在访问请求的报文头部中以post方式传递到服务端;
服务端接收到客户端的访问请求后,先判断其报文头部有没有验证码,如果有验证码,则先解密,检查验证码是否正确,是否已经过期;如果没有验证码,或者验证码过期,或者验证码为伪造的,则拒绝资源请求;如果判断验证码有效,则返回给用户请求的资源。
当浏览器关闭后,cookie自动被清除,服务端存储信息到时间自动失效。
本发明的一种基于json验证码的安全认证拦截的方法和现有技术相比,具有以下有益效果:
本发明的一种基于json验证码的安全认证拦截的方法,大幅度提升了分布式环境下服务器的访问效率,避免了海量用户同时在线造成宕机的情况,并且json验证码都经过AES265加密的,且具有时效性的,避免了被截获后信息泄露的风险;系统中用户的上下文信息并不保存在客户端,而是保存在服务端的可信缓存中,进一步保障了访问的安全性,当token超时或过期后,提供续期机制,让用户体验更顺畅,实用性强,适用范围广泛,具有很好的推广应用价值。
附图说明
附图1为本发明的实现流程图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步说明。
如附图1所示,本发明提供一种基于json验证码的安全认证拦截的方法,发明的目的在于防止用户在没有登录系统的情况下,直接访问系统资源。
其实现过程为:首先将系统内所有的访问链接都视为系统的资源,只有成功登陆的用户,才可以访问,未登录的用户不能访问;在成功登录后,给用户授予一个json验证码,当用户访问系统资源时,用户的每个访问请求都附上该json验证码,即没有json验证码、或者是json验证码过期的访问请求,均认定为非法请求,不授予权限。
具体过程为:
用户登录,向后台发送用户名和密码。密码传输时需要加密。
服务端在用户名密码验证通过后,如果缓存中没有用户信息,访问数据库得到用户信息。
将用户的信息保存在可信的服务端缓存中,避免频繁访问数据库。
服务端将用户信息传给验证码生成器,为该用户创建一个经过加密的json验证码,该验证码通过AES265加密,并且此验证码是有时效性的,即使被截获或者被泄露也会很快失效。
将此验证码保存到客户端cookie当中。cookie中不保存用户的任何信息,用户的信息都在服务端,避免信息泄露,此时只是把 cookie 当作一个储存机制,而不是一种验证机制,所以没有 XSRF 攻击的危险。
当用户点击菜单时,从cookie中取出验证码,添加在访问请求的报文头部中以post方式传递到服务器端。
服务端接收到一个客户端的资源请求后,会先判断其报文头部有没有验证码,有验证码的话,会先解密,检查验证码是否正确,是否已经过期。如果没有验证码,或者验证码过期,或者验证码是伪造的,会拒绝资源请求。如果判断验证码有效,才会返回给用户请求的资源。
当浏览器关闭后,cookie自动被清除,服务端存储信息到时间自动失效。
在 tokens 的使用中,一旦 token 过期,只需要重新获取一个。服务端提供接口刷新 token,刷新后得到一个更新了有效期的 token,同时旧token失效。
基于json验证码的安全认证拦截的方法,与传统的安全认证拦截技术目的都是判断用户的访问是否登录用户的操作,如果是未经登陆授权的操作,就拦截。传统的方式是通过session进行的。通过校验session是否存在,来判断用户是否已经登录。而且信息未经过加密,不安全。本发明则是通过json验证码在服务端校验来实现的。
服务端不需要存贮记录用户的登录状态的session的信息。不需要保存任何登录用户的状态。
通过本发明,可实现以下两点:
一是为了提高分布式环境下高并发情况下的访问效率。分布式环境下,海量用户登录,同时在线的用户数量庞大,存储大量的session数据给服务器带来巨大的压力。本发明的实现方式,不需要在服务端存储大量的登录信息,只需要在客户端保存加密凭据,从而大幅度的降低了服务端的压力。
二是为了提高用户访问的安全性。服务端拦截客户端发来的每个请求,通过验证请求是否带着合法的token验证码来验证用户是否已经登录。防止用户在没有登录系统的情况下,直接访问系统资源,造成信息泄露和恶意访问,破坏信息系统安全。并且产生的json验证码都进行了加密,并且设置了时效性,有效保障json验证码的可信度。
在本发明中,服务器端不需要存储用户的登录状态,服务端只需要验证客户端json验证码是否合法即可。减少了服务端的内存压力。采用服务端缓存技术,将用户信息有效的缓存在起来,进一步减轻了访问数据库的压力。并且客户端只存贮了用户唯一标识和json验证码,不会存储密码这种敏感信息,避免了人为恶意攻击客户端造成密码泄露。同时json验证码是有时效性的,默认240分钟失效,即使被截获,也不会给够进行暴力破解的时间,避免了截获后的信息泄露风险。而且json验证码是经过AES256加密算法加密,有效保证了信息的安全。
通过上面具体实施方式,所述技术领域的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的具体实施方式。在公开的实施方式的基础上,所述技术领域的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。
除说明书所述的技术特征外,均为本专业技术人员的已知技术。