基于token的客户端身份验证的方法及系统与流程

文档序号:16815441发布日期:2019-02-10 14:24阅读:620来源:国知局
基于token的客户端身份验证的方法及系统与流程

本申请涉及信息技术领域,具体地说,涉及一种基于token的客户端身份验证的方法及系统。



背景技术:

jsonwebtoken(jwt)是为了网络应用环境间传递声明而执行的一种基于json的开发标准(rfc7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(sso)场景。jwt的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

传统的基于sessino的认证,每个用户经过应用认证之后,都要在服务端做一次记录,以便用户下次请求的鉴别,通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大,而且用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,限制了负载均衡器的能力,也意味着限制了应用的扩展性。

基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或会话信息。这也就意味着基于tokent认证机制的应用不需要去考虑用户在哪一台服务器登陆了,这就为应用的扩展提供了便利。

但是,token在生成的时候就已经固定,其中存储了签发时间和过期时间,当过期后,身份验证将不通过。因此,在使用过程中,存在两个缺陷。一是不能控制token失效,同一个用户如果重新使用账户密码登录,生成新的token,旧的token任然有效,可以通过身份认证;二是同一个账户可以在多个客户端同时登录。这样,在用户密码或token泄露后,修改密码也无法阻止他人登录,而且不能及时知晓账户信息已泄露,存在安全隐患。



技术实现要素:

有鉴于此,本申请所要解决的技术问题是提供了一种基于token的客户端身份验证的方法及系统,利用token与数据库校验相结合的方式,提高用户身份认证安全性,确保用户通过修改密码或退出账户重新登录等方式使用账户密码验证登录生成新的token后,旧token将不能通过身份认证,有利于确保账户安全。

为了解决上述技术问题,本申请有如下技术方案:

第一方面,本申请提供一种基于token的客户端身份验证的方法,其特征在于,包括:

等待接收通过客户端发送的用户名和与该所述用户名对应的密码信息,所述用户名还与用户id对应;

判断所述用户名和所述密码信息与服务器中存储的用户名和密码信息是否匹配,若不匹配,则提示重新输入;若匹配,则生成与所述用户id对应的授权令牌token;

将所述授权令牌token存储至数据库,并将所述授权令牌token返回至所述客户端;

等待接收通过客户端发送的请求信息,判断所述请求信息中是否携带授权令牌token:

若携带有授权令牌token,则判断所述授权令牌token是否有效,若所述授权令牌token无效,则验证不通过,返回重新登录信息;若授权令牌token有效,则判断存储在所述数据库中的授权令牌token和所述请求信息中所携带的授权令牌token是否一致,若二者一致,则验证通过;若二者不一致,则验证不通过,返回账户异地登录信息;

若未携带授权令牌token,则返回重新登录信息。

可选地,其中:

与所述用户id对应的所述授权令牌token包括签发时间、过期时间、用户id信息和密钥。

可选地,其中:

所述判断所述授权令牌token是否有效,进一步为:

将与所述用户id对应的所述授权令牌token中的过期时间与当前时间进行比较,若所述当前时间超出所述过期时间,则所述授权令牌token无效;若所述当前时间未超出所述过期时间,则所述所述授权令牌token有效。

可选地,其中:

所述判断存储在所述数据库中的授权令牌token和所述请求信息中所携带的授权令牌token是否一致,进一步为:

根据所述请求信息中所携带的授权令牌token获取与该授权令牌token对应的用户id,在所述数据库中查找与该用户id对应的授权令牌token,对比所述请求信息中所携带的授权令牌token和存储在所述数据库中的且与所述用户id对应的授权令牌token是否相同,若相同,则二者一致;若不相同,则二者不一致。

第二方面,本申请提供一种基于token的客户端身份验证的系统,其特征在于,包括:

信息接收模块,等待接收通过客户端发送的用户名和与该所述用户名对应的密码信息,所述用户名还与用户id对应;

token生成模块,用于判断所述用户名和所述密码信息与服务器中存储的用户名和密码信息是否匹配,若不匹配,则提示重新输入;若匹配,则生成与所述用户id对应的授权令牌token;

token处理模块,用于将所述授权令牌token存储至数据库,并将所述授权令牌token返回至所述客户端;

token验证模块,用于等待接收通过客户端发送的请求信息,判断所述请求信息中是否携带授权令牌token:若携带有授权令牌token,则判断所述授权令牌token是否有效,若所述授权令牌token无效,则验证不通过,返回重新登录信息;若授权令牌token有效,则判断存储在所述数据库中的授权令牌token和所述请求信息中所携带的授权令牌token是否一致,若二者一致,则验证通过;若二者不一致,则验证不通过,返回账户异地登录信息;若未携带授权令牌token,则返回重新登录信息。

可选地,其中:

与所述用户id对应的所述授权令牌token包括签发时间、过期时间、用户id信息和密钥。

可选地,其中:

所述token验证模块,进一步用于将与所述用户id对应的所述授权令牌token中的过期时间与当前时间进行比较,若所述当前时间超出所述过期时间,则所述授权令牌token无效;若所述当前时间未超出所述过期时间,则所述所述授权令牌token有效。

可选地,其中:

所述token验证模块,进一步用于根据所述请求信息中所携带的授权令牌token获取与该授权令牌token对应的用户id,在所述数据库中查找与该用户id对应的授权令牌token,对比所述请求信息中所携带的授权令牌token和存储在所述数据库中的且与所述用户id对应的授权令牌token是否相同,若相同,则二者一致;若不相同,则二者不一致。

与现有技术相比,本申请所述的基于token的客户端身份验证的方法及系统,达到了如下效果:

(1)本发明所提供的基于token的客户端身份验证的方法及系统,在账户异地登录后将及时提醒用户,使用户的权益得到了有效的保障。

(2)本发明所提供的基于token的客户端身份验证的方法及系统,在发现账户异地登录后,将自动跳转到重新登录页面,用户确认登录后,立即生成新的token,旧token将不能通过身份验证,从而有效避免了同一个账户可以在多个客户端同时登录的现象。

(3)本发明所提供的基于token的客户端身份验证的方法及系统,当token泄露后,可以通过重新登录的方式使已经泄露的token失效,从而进一步有利于确保账户安全。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1所示为本申请实施例所提供的基于token的客户端身份验证的方法的一种流程图;

图2所示为本申请实施例所提供的基于token的客户端身份验证的方法中对token进行验证的一种流程图;

图3所示为本申请实施例所提供的一种基于token的客户端身份验证的系统的结构图。

具体实施方式

如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。此外,“耦接”一词在此包含任何直接及间接的电性耦接手段。因此,若文中描述一第一装置耦接于一第二装置,则代表所述第一装置可直接电性耦接于所述第二装置,或通过其他装置或耦接手段间接地电性耦接至所述第二装置。说明书后续描述为实施本申请的较佳实施方式,然所述描述乃以说明本申请的一般原则为目的,并非用以限定本申请的范围。本申请的保护范围当视所附权利要求所界定者为准。

现有技术中,基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或会话信息。这也就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登陆了,这就为应用的扩展提供了便利。

jwt(jsonwebtoken)是一个规范,一般被用来在客户端和服务端之间传递被认证的用户身份信息,以便于从资源服务器获取资源。jwt是由三部分构成,将这三段信息文本用链接构成了jwt字符串。第一部分我们称它为头部(header)第二部分我们称其为载荷(payload,类似于飞机上承载的物品),第三部分是签证(signature)。

通常,token在生成的时候就已经固定,其中存储了签发时间和过期时间,当过期后,身份验证将不通过。因此,在使用过程中,存在两个缺陷。一是不能控制token失效,同一个用户如果重新使用账户密码登录,生成新的token,旧的token任然有效,可以通过身份认证;二是同一个账户可以在多个客户端同时登录。这样,在用户密码或token泄露后,修改密码也无法阻止他人登录,而且不能及时知晓账户信息已泄露,存在安全隐患。

有鉴于此,本申请所要解决的技术问题是提供了一种基于token的客户端身份验证的方法及系统,利用token与数据库校验相结合的方式,提高用户身份认证安全性,确保用户通过修改密码或退出账户重新登录等方式使用账户密码验证登录生成新的token后,旧token将不能通过身份认证,有利于确保账户安全。

以下结合附图和具体实施例进行详细说明。

图1所示为本申请实施例所提供的基于token的客户端身份验证的方法的一种流程图,请参见图1,本申请实施例所提供的一种基于token的客户端身份验证的方法,包括:

步骤101、等待接收通过客户端发送的用户名和与该所述用户名对应的密码信息,所述用户名还与用户id对应;

步骤102、判断所述用户名和所述密码信息与服务器中存储的用户名和密码信息是否匹配,若不匹配,则提示重新输入;若匹配,则生成与所述用户id对应的授权令牌token;

步骤103、将所述授权令牌token存储至数据库,并将所述授权令牌token返回至所述客户端;

步骤104、等待接收通过客户端发送的请求信息,判断所述请求信息中是否携带授权令牌token:

若携带有授权令牌token,则判断所述授权令牌token是否有效,若所述授权token令牌无效,则验证不通过,返回重新登录信息;若授权令牌token有效,则判断存储在所述数据库中的授权令牌token和所述请求信息中所携带的授权令牌token是否一致,若二者一致,则验证通过;若二者不一致,则验证不通过,返回账户异地登录信息;

若未携带授权令牌token,则返回重新登录信息。

具体地,本申请实施例所提供的基于token的客户端身份验证的方法中,通过步骤101,等待接收通过客户端发送的用户名和与该用户名对应的密码信息,在接收到用户名和对应的密码信息后,通过步骤102判断用户名和密码信息是否正确,即判断用户名和密码信息是否与服务器中存储的用户名和密码信息匹配,若不匹配则提示重新输入用户名或密码;若匹配,则生成授权令牌token。特别是,在生成授权令牌token后,会通过步骤103将授权令牌token存储至数据库中,并将所述授权令牌token返回至所述客户端,当用户在同一客户端再次发出请求信息时,可通过该授权令牌token进行验证,无需多次输入用户名和密码信息。步骤104中,当接收到客户端发送的请求信息时,会首先判断请求信息中是否携带授权令牌token,若未携带,则返回重新登录信息;若携带,则会判断该授权令牌token的有效性,若无效,则验证不通过,需要重新登录;若有效,则会进行进一步判断,判断存储在所述数据库中的授权令牌token和所述请求信息中所携带的授权令牌token是否一致,若二者一致,则验证通过;若二者不一致,则验证不通过,说明账户在执行异地登录,返回“账户异地登录,token已失效,请重新登录,若非本人登录,请及时修改密码”。如此,当用户名发生异地登录时会及时提醒用户,发现账户异地登录后,自动跳转到重新登录页面,用户确认登陆后,立即生成新的token,旧token将不能通过身份认证。而且,当token泄露后,可以通过重新登录的方式,使已泄露的token失效,从而在很大程度上保障了用户账户的安全性。

可选地,本申请实施例所提供的基于token的客户端身份验证的方法中,上述步骤102中,与所述用户id对应的所述授权令牌token包括签发时间、过期时间、用户id信息和密钥。如此,对每个用户id对应生成一个加密token,可灵活设置token的有效期,在有效期内,再次通过对应的用户id信息登录时,可正常登录;当超出有效期时,该token失效,需要重新通过用户名和密码进行登录。

可选地,本申请实施例所提供的基于token的客户端身份验证的方法中,上述步骤104,判断授权令牌token是否有效,进一步为:

将与用户id对应的授权令牌token中的过期时间与当前时间进行比较,若当前时间超出过期时间,则授权令牌token无效;若当前时间未超出过期时间,则授权令牌token有效。也就是说,判断授权令牌token是否有效的过程,也就是将其过期时间和当前时间进行比对的过程,若过期,则说明token无效,返回“token过期,请重新登录”,客户端显示token过期提示,并自动跳转到登录界面,重新通过用户名密码登录。若token在有效期内,则说明token有效,可进行进一步的操作。本申请实施例所提供的基于token的客户端身份验证的方法中,在接收到客户端的登录请求后,首先验证token的有效性,有效时方执行进一步的操作,无效则提示重新登录,此种操作方式有利于简化验证流程,提高身份验证效率。

可选地,上述步骤104中,判断存储在所述数据库中的授权令牌token和所述请求信息中所携带的授权令牌token是否一致,进一步为:

根据请求信息中所携带的授权令牌token获取与该授权令牌token对应的用户id,在所述数据库中查找与该用户id对应的授权令牌token,对比所述请求信息中所携带的授权令牌token和存储在所述数据库中的且与所述用户id对应的授权令牌token是否相同,若相同,则二者一致;若不相同,则二者不一致。

具体地,当某一用户id获得授权令牌token后,再次进行登录时,会自动形成与用户id对应的授权令牌token并存储至数据库中,取代原有的授权令牌token;当登录地址与上次登录地址相同时,该授权令牌token为同一授权令牌token;当登录地址与上次登录地址不同时,会生成新的授权令牌token,与在别的客户端形成的授权令牌token不同。因此,本申请通过比对请求信息中所携带的授权令牌token和数据库中所存储的授权令牌token是否一致,即可判断用户id是否出现异地登录的现象。当不一致时,则验证不通过,返回“账户异地登录,token已失效,请重新登录,若非本人登录,请及时修改密码”。如此,用户在接收到该信息后,若非本人操作,即可重新登录修改密码,形成新的token,使异地登录的账号登录失败,进而在第一时间保障了用户名的安全性。

本申请实施例所提供的基于token的客户端身份验证的方法中,重点改进token验证方式,结合数据库校验,双重验证。客户端的请求,服务端通过过滤器(filter)进行过滤。首先,验证token是否有效,无效则验证不通过,返回“token过期,请重新登录”,客户端显示token过期提示,并自动跳转到登录界面,重新通过用户名密码登录。若token有效,则获取token中的用户id,根据用户id从数据库获取保存的用户token,对比客户端传来的token与数据库存储的token是否一致。若一致,则验证通过,执行请求,将数据返回客户端;若不一致,则验证不通过,返回“账户异地登录,token已失效,请重新登录,若非本人登录,请及时修改密码”。服务器token验证详细流程可参见图2,其中图2所示为本申请实施例所提供的基于token的客户端身份验证的方法中对token进行验证的一种流程图。

例如,当用户在pc端登录12306购票系统后,会形成对应的授权令牌token,在后续操作中,用户可能会在该系统上进行多次请求,例如查询从城市e到城市f的火车票的请求,查询从城市f到城市g的火车票的请求,在执行每次请求时,只需验证token的有效性即可,token有效则无需再次输入用户名和密码,通过该token即可完成各项请求。若token无效,则需要重新输入用户名和密码。若接收到账户异地登录信息时,若非本人操作,用户可重新登录修改用户名和密码,生成新的token,以确保账户的安全性。

以下通过三种场景对本申请实施例所提供的基于token的客户端身份验证的方法进行说明。

1、正常使用场景

如果某账户只在同一台设备上使用,则会按照上述步骤101-104进行,两个授权令牌token为同一值,不会改变。在token生成以后,用户每次使用将不需要输入用户名密码,直接通过验证保存在客户端的token有效性来执行请求。假如设定的token过期时间为一周,则在一周内,能正常通过验证并执行请求,超期之后,在步骤104中,验证token有效性则不通过,返回“token过期”。客户端跳转至登录页面,用户再次使用用户名和密码登录即可。

2、异地登录场景

用户在a设备上正常使用,他人在获取其用户名和密码后,使用b设备登录使用,则会生成新的token(b)并存储至数据库,覆盖用户本人原来存储的token(a)。此后,用户本人使用a设备发送请求,请求携带的token依然是原来存储在设备上的token(a),在步骤104中,token(a)未过期的情况下,与数据库存储的token(b)对比,则不相同,验证不通过,返回“异地登录”。客户端跳转至登录页面,用户再次使用用户名和密码登录即可。同时提醒用户,账户密码可能泄露,请及时修改密码。

3、token泄露场景

用户在正常使用过程中,如果他人非法获取了token值,在其过期之前,就可以在不知道用户名和密码的情况下,使用token发送请求。此时,用户可以退出系统,重新使用用户名和密码登录系统,则会生成新的token,并存储至数据库。他人再使用原来泄露的token发送请求,将验证失败。

如此,本申请实施例所提供的基于token的客户端身份验证方法,改进了同一用户在其他设备上登录后,原设备无法知晓,且生成新的token后,旧token依旧能通过验证的问题。在保持token本身跨语言支持、可以在自身存储一些其它业务逻辑所必要的非敏感信息、便于传输、易于扩展等特点的基础上,实现异地登录提醒和生成新token(在任何设备使用用户密码登录)使旧token失效的功能。进一步保障用户名及信息安全。

基于同一发明构思,本申请还提供一种基于token的客户端身份验证的系统,参见图3,图3所示为本申请实施例所提供的一种基于token的客户端身份验证的系统100的结构图,该系统100包括:

信息接收模块10,用于等待接收通过客户端发送的用户名和与该所述用户名对应的密码信息,所述用户名还与用户id对应;

token生成模块20,用于判断所述用户名和所述密码信息与服务器中存储的用户名和密码信息是否匹配,若不匹配,则提示重新输入;若匹配,则生成与所述用户id对应的授权令牌token;

token处理模块30,用于将所述授权令牌token存储至数据库,并将所述授权令牌token返回至所述客户端;

token验证模块40,用于等待接收通过客户端发送的请求信息,判断所述请求信息中是否携带授权令牌token:若携带有授权令牌token,则判断所述授权令牌token是否有效,若所述授权令牌token无效,则验证不通过,返回重新登录信息;若授权令牌token有效,则判断存储在所述数据库中的授权令牌token和所述请求信息中所携带的授权令牌token是否一致,若二者一致,则验证通过;若二者不一致,则验证不通过,返回账户异地登录信息;若未携带授权令牌token,则返回重新登录信息。

具体地,本申请实施例所提供的基于token的客户端身份验证的系统100中,通过信息接收模块10,等待接收通过客户端发送的用户名和与该用户名对应的密码信息,在接收到用户名和对应的密码信息后,通过token生成模块20判断用户名和密码信息是否正确,即判断用户名和密码信息是否与服务器中存储的用户名和密码信息匹配,若不匹配则提示重新输入用户名或密码;若匹配,则生成授权令牌token。特别是,在生成授权令牌token后,会通过token处理模块30将授权令牌token存储至数据库中,并将所述授权令牌token返回至所述客户端,当用户在同一客户端再次发出请求信息时,可通过该授权令牌token进行验证,无需多次输入用户名和密码信息。当接收到客户端发送的请求信息时,token验证模块40会首先判断请求信息中是否携带授权令牌token,若未携带,则返回重新登录信息;若携带,则会判断该授权令牌token的有效性,若无效,则验证不通过,需要重新登录;若有效,则会进行进一步判断,判断存储在所述数据库中的授权令牌token和所述请求信息中所携带的授权令牌token是否一致,若二者一致,则验证通过;若二者不一致,则验证不通过,说明账户在执行异地登录,返回“账户异地登录,token已失效,请重新登录,若非本人登录,请及时修改密码”。如此,当用户名发生异地登录时会及时提醒用户,发现账户异地登录后,自动跳转到重新登录页面,用户确认登陆后,立即生成新的token,旧token将不能通过身份认证。而且,当token泄露后,可以通过重新登录的方式,使已泄露的token失效,从而在很大程度上保障了用户账户的安全性。

可选地,本申请与所述用户id对应的所述授权令牌token包括签发时间、过期时间、用户id信息和密钥。如此,对每个用户id对应生成一个加密token,可灵活设置token的有效期,在有效期内,再次通过对应的用户id信息登录时,可正常登录;当超出有效期时,该token失效,需要重新通过用户名和密码进行登录。

可选地,本申请实施例所提供的基于token的客户端身份验证的系统100中,token验证模块40,进一步用于将与所述用户id对应的所述授权令牌token中的过期时间与当前时间进行比较,若所述当前时间超出所述过期时间,则所述授权令牌token无效;若所述当前时间未超出所述过期时间,则所述所述授权令牌token有效。也就是说,判断授权令牌token是否有效的过程,也就是将其过期时间和当前时间进行比对的过程,若过期,则说明token无效,返回“token过期,请重新登录”,客户端显示token过期提示,并自动跳转到登录界面,重新通过用户名密码登录。若token在有效期内,则说明token有效,可进行进一步的操作。本申请实施例所提供的基于token的客户端身份验证的方法中,在接收到客户端的登录请求后,首先验证token的有效性,有效时方执行进一步的操作,无效则提示重新登录,此种操作方式有利于简化验证流程,提高身份验证效率。

可选地,申请实施例所提供的基于token的客户端身份验证的系统100中,token验证模块40,进一步用于根据所述请求信息中所携带的授权令牌token获取与该授权令牌token对应的用户id,在所述数据库中查找与该用户id对应的授权令牌token,对比所述请求信息中所携带的授权令牌token和存储在所述数据库中的且与所述用户id对应的授权令牌token是否相同,若相同,则二者一致;若不相同,则二者不一致。

具体地,当某一用户id获得授权令牌token后,再次进行登录时,会自动形成与用户id对应的授权令牌token并存储至数据库中,取代原有的授权令牌token;当登录地址与上次登录地址相同时,该授权令牌token为同一授权令牌token;当登录地址与上次登录地址不同时,会生成新的授权令牌token,与在别的客户端形成的授权令牌token不同。因此,本申请通过比对请求信息中所携带的授权令牌token和数据库中所存储的授权令牌token是否一致,即可判断用户id是否出现异地登录的现象。当不一致时,则验证不通过,返回“账户异地登录,token已失效,请重新登录,若非本人登录,请及时修改密码”。如此,用户在接收到该信息后,若非本人操作,即可重新登录修改密码,形成新的token,使异地登录的账号登录失败,进而在第一时间保障了用户名的安全性。

通过以上各实施例可知,本申请存在的有益效果是:

(1)本发明所提供的基于token的客户端身份验证的方法及系统,在账户异地登录后将及时提醒用户,使用户的权益得到了有效的保障。

(2)本发明所提供的基于token的客户端身份验证的方法及系统,在发现账户异地登录后,将自动跳转到重新登录页面,用户确认登录后,立即生成新的token,旧token将不能通过身份验证,从而有效避免了同一个账户可以在多个客户端同时登录的现象。

(3)本发明所提供的基于token的客户端身份验证的方法及系统,当token泄露后,可以通过重新登录的方式使已经泄露的token失效,从而进一步有利于确保账户安全。

本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1