一种基于JWT的用户认证的限流方法及装置与流程

    专利2022-07-07  124


    本发明属于信息安全技术领域,具体涉及一种基于jwt的用户认证的限流方法及装置。



    背景技术:

    随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因为基于传统的session管理用户信息,需要将用户信息保存在服务端,即便近几年内存数据库逐渐成熟,对于服务端仍是不小的压力,特别是对于用户量大的互联网系统。jwt的解决方案是,将认证信息返回个客户端,储存在客户端,下次访问其他页面,需要从客户端传递认证信息回服务器端。

    当前基于jwt的用户认证技术大多为了解决单点登录和跨应用的,这对于分布式系统来说是很有必要的,但绝大多数基于jwt的认证用户技术并不能防止不同的用户使用同一个认证信息在不同的设备上访问资源,这对于高并发的系统来说,存在一定的安全隐患。



    技术实现要素:

    有鉴于此,本发明提出了本发明的目的在于解决认证信息泄漏时多个设备使用同一个认证信息进行资源访问的问题。

    本发明第一方面,公开一种基于jwt的用户认证的限流方法,所述方法包括:

    校验用户首次登录时的用户名和密码,生成jwt并发送至客户端保存;

    在数据库中记录并更新对应用户的登录状态,登录ip,tokenid;

    接收到客户端的资源访问请求时,校验用户的用户名、密码和携带的jwt;

    若校验通过,校验用户名、密码和登录ip对应的用户信息是否在其他地址登录,若是,则更新数据库中上一次登录的tokenid,使上一次登录的tokenid失效。

    优选的,所述生成的jwt负荷中携带用户名,当前登录ip。

    优选的,所述接收到客户端的资源访问请求中携带用户的jwt,接收到客户端的资源访问请求时,校验用户的用户名、密码,校验所述jwt是否过期。

    优选的,校验用户名、密码和登录ip对应的用户信息是否在其他地址登录,若是,则更新数据库中用户上一次登录的tokenid,使上一次登录的tokenid失效具体包括:

    获取当前账号上一次登录时的tokenid和登录ip;

    比较当前请求的tokenid与上一次登录时的tokenid,若相同,则校验通过,否则返回错误信息并跳转至登陆页面;

    比较当前请求的登录ip与上一次登录时的登录ip;

    若相同,则通过验证,返回用户请求的资源至客户端;

    否则,将数据库中上一次登录的tokenid置为空,根据当前登录信息重新生成jwt,使前一个同样用户名登录的tokenid失效。

    优选的,数据库中用户登录信息包括登录ip、当前账号上个登录用户的tokenid。

    本发明第二发明,公开一种基于jwt的用户认证的限流装置,所述装置包括:

    jwt生成单元:校验用户首次登录时的用户名和密码,生成jwt并发送至客户端保存;

    数据库单元:在数据库中记录并更新对应账号的登录状态,登录ip,tokenid;

    检验单元:接收到客户端的资源访问请求时,校验用户的用户名、密码和携带的jwt是否过期;

    限流单元:若检验单元校验通过,校验用户名、密码和登录ip对应的用户信息是否在其他地址登录,若是,则更新数据库中上一次登录的tokenid,使上一次登录的tokenid失效。

    优选的,所述限流单元具体用于:

    获取当前账号上一次登录时的tokenid和登录ip;

    比较当前请求的tokenid与上一次登录时的tokenid,若相同,则校验通过,否则返回错误信息并跳转至登陆页面;

    若当前请求的tokenid与上一次登录时的tokenid相同,则比较当前请求的登录ip与上一次登录时的登录ip;

    若相同,则通过验证,返回用户请求的资源;

    否则,将数据库中上一次登录的tokenid置为空,重新生成jwt,使前一个同样用户名登录的tokenid失效。

    本发明相对于现有技术具有以下有益效果:

    本发明实现同一个账号只能限制一个用户登录,后面登录的用户会自动踢掉前面登录的用户,防止账号认证信息被窃取时不同的用户使用同一个认证信息在不同的设备上访问资源,从而从源端登录开始限制并发资源的访问,提升了系统的安全性和稳定性。

    附图说明

    为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

    图1为本发明的基于jwt的用户认证的限流方法流程示意图;

    图2为本发明本发明客户端与服务端交互时序图。

    具体实施方式

    下面将结合本发明实施方式,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。

    如图1所示,本发明提出一种基于jwt的用户认证的限流方法,所述方法包括:

    s1、校验用户首次登录时的用户名和密码,生成jwt并发送至客户端保存;

    客户端登录应用系统,输入用户名和密码,通过httprequestservlet可以获取此刻访问的客户端主机地址。对于首次登录的同用户名的用户,去数据库中校验该用户的用户名和密码,如果通过,生成一个jwt。所述生成的jwt负荷中携带用户名,当前登录ip。将jwt发送至客户端并保存在客户端本地。

    s2、在数据库中记录并更新对应用户的登录状态,登录ip,tokenid;

    数据库中用户登录信息除了包括当前账号的用户名、密码、登录时间外,还包括登录ip、重试登录次数、上个登录用户的tokenid。

    s3、接收到客户端的资源访问请求时,校验用户的用户名、密码和携带的jwt;

    具体的,客户端携带jwt访问资源,获取客户端发起资源访问请求时携带的jwt,校验用户的用户名、密码,校验jwt是否过期;

    s4、若校验通过,校验用户名、密码和登录ip对应的用户信息是否在其他地址登录,若是,则更新数据库中上一次登录的tokenid,使上一次登录的tokenid失效。

    具体的,获取当前账号上一次登录时的tokenid和登录ip;

    比较当前请求的tokenid与上一次登录时的tokenid,若相同,则校验通过,否则返回错误信息至客户端并跳转至登陆页面。

    若当前请求的tokenid与上一次登录时的tokenid相同,进一步比较当前请求的登录ip与上一次登录时的登录ip;

    若相同,则通过验证,返回用户请求的资源至客户端,并在客户端展示数据。

    否则,说明用户信息已在其他地址登录,将数据库中上一次登录的tokenid置为空,重新生成jwt,使前一个同样用户名登录的tokenid失效。

    图2为本发明客户端与服务端交互时序图。客户端用户通过浏览器首次登录时,去数据库中校验该用户的用户名和密码,如果通过,生成一个jwt。将生成的jwt发送给浏览器,浏览器保存首次登录的tokenid到本地。浏览器携带jwt访问服务端资源,服务端校验jwt的合法性,看是否过期,并且将当前请求的tokenid与数据库中的用户tokenid进行比对,看该用户名、密码和登录ip对应的用户信息是否在其他地址登录。如果token信息校验通过并且已经在其他地方登录,则将数据库中当前账号的上一次登录时的tokenid置空,并且根据当前的信息重新生成jwt,使前一个同样用户名登录的tokenid失效。从而达到限制同一个用户名在不同ip登录的情况。验证通过后,返回数据给浏览器,浏览器展示数据。如果验证不通过,给出相应的提示信息,浏览器展示提示信息,重新跳转到登录界面。

    与所述方法实施例相对应,本发明还公开一种基于jwt的用户认证的限流装置,所述装置包括:

    jwt生成单元:校验用户首次登录时的用户名和密码,生成jwt并发送至客户端保存;

    数据库单元:在数据库中记录并更新对应账号的登录状态,登录ip,tokenid;

    检验单元:接收到客户端的资源访问请求时,校验用户的用户名、密码和携带的jwt是否过期;

    限流单元:若检验单元校验通过,校验用户名、密码和登录ip对应的用户信息是否在其他地址登录,若是,则更新数据库中上一次登录的tokenid,使上一次登录的tokenid失效。

    所述限流单元具体用于:获取当前账号上一次登录时的tokenid和登录ip;

    比较当前请求的tokenid与上一次登录时的tokenid,若相同,则校验通过,否则返回错误信息并跳转至登陆页面;若当前请求的tokenid与上一次登录时的tokenid相同,则比较当前请求的登录ip与上一次登录时的登录ip;若相同,则通过验证,返回用户请求的资源;否则,将数据库中上一次登录的tokenid置为空,重新生成jwt,使前一个同样用户名登录的tokenid失效。

    以上所述仅为本发明的较佳实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。


    技术特征:

    1.一种基于jwt的用户认证的限流方法,其特征在于,所述方法包括:

    校验用户首次登录时的用户名和密码,生成jwt并发送至客户端保存;

    在数据库中记录并更新对应用户的登录状态,登录ip,tokenid;

    接收到客户端的资源访问请求时,校验用户的用户名、密码和携带的jwt是否过期;

    若校验通过,校验用户名、密码和登录ip对应的用户信息是否在其他地址登录,若是,则更新数据库中上一次登录的tokenid,使上一次登录的tokenid失效。

    2.根据权利要求1所述基于jwt的用户认证的限流方法,其特征在于,所述生成的jwt负荷中携带用户名,当前登录ip。

    3.根据权利要求2所述基于jwt的用户认证的限流方法,其特征在于,所述接收到客户端的资源访问请求中携带用户的jwt。

    4.根据权利要求3所述基于jwt的用户认证的限流方法,其特征在于,校验用户名、密码和登录ip对应的用户信息是否在其他地址登录,若是,则更新数据库中用户上一次登录的tokenid,使上一次登录的tokenid失效具体包括:

    获取当前账号上一次登录时的tokenid和登录ip;

    比较当前请求的tokenid与上一次登录时的tokenid,若相同,则校验通过,否则返回错误信息并跳转至登陆页面;

    比较当前请求的登录ip与上一次登录时的登录ip;

    若相同,则通过验证,返回用户请求的资源至客户端;

    否则,将数据库中上一次登录的tokenid置为空,根据当前登录信息重新生成jwt,使前一个同样用户名登录的tokenid失效。

    5.根据权利要求4所述基于jwt的用户认证的限流方法,其特征在于,数据库中用户登录信息包括用户名、密码、登录ip、当前账号上个登录用户的tokenid。

    6.一种基于jwt的用户认证的限流装置,其特征在于,所述装置包括:

    jwt生成单元:校验用户首次登录时的用户名和密码,生成jwt并发送至客户端保存;

    数据库单元:在数据库中记录并更新对应账号的登录状态,登录ip,tokenid;

    检验单元:接收到客户端的资源访问请求时,校验用户的用户名、密码和携带的jwt是否过期;

    限流单元:若检验单元校验通过,校验用户名、密码和登录ip对应的用户信息是否在其他地址登录,若是,则更新数据库中上一次登录的tokenid,使上一次登录的tokenid失效。

    7.根据权利要求6所述基于jwt的用户认证的限流装置,其特征在于,所述限流单元具体用于:

    获取当前账号上一次登录时的tokenid和登录ip;

    比较当前请求的tokenid与上一次登录时的tokenid,若相同,则校验通过,否则返回错误信息并跳转至登陆页面;

    若当前请求的tokenid与上一次登录时的tokenid相同,则比较当前请求的登录ip与上一次登录时的登录ip;

    若相同,则通过验证,返回用户请求的资源;

    否则,将数据库中上一次登录的tokenid置为空,重新生成jwt,使前一个同样用户名登录的tokenid失效。

    技术总结
    本发明公开一种基于JWT的用户认证的限流方法及装置,所述方法包括:校验用户首次登录时的用户名和密码,生成JWT并发送至客户端保存;在数据库中记录并更新对应用户的登录状态,登录IP,TokenID;接收到客户端的资源访问请求时,校验用户的用户名、密码和携带的JWT;若校验通过,校验同样的用户信息是否在其他地址登录,若是,则更新数据库中上一次登录的TokenID,使上一次登录的TokenID失效。本发明可以从源端登录开始限制并发资源的访问,提升了系统的安全性和稳定性。

    技术研发人员:刘虎;周显敬;张红霞;朱俊辉
    受保护的技术使用者:武汉卓尔信息科技有限公司
    技术研发日:2020.12.17
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-7690.html

    最新回复(0)