本发明属于api网关技术领域,具体涉及一种基于网关路由转发的鉴权认证方法。
背景技术:
api网关作为对外提供服务的入口,就像企业服务的大门。一方面,要有足够的能力,应对大量的对外访问,另一方面,还要给对内的服务提供一定的安全保障。现有的api网关不能自动识别外部的有效访问,容易发生以下情况:一是当并发量较大时很有可能超出网关承受能力,轻则导致服务抛弃一部分请求,重则导致服务器资源耗尽,不可用;二是恶意请求容易入侵服务器,对内部服务造成安全隐患。
技术实现要素:
为了解决现有技术存在的上述问题,本发明目的在于提供一种可提高网关安全性和可用性的基于网关路由转发的新型鉴权认证方法。
本发明所采用的技术方案为:
基于网关路由转发的鉴权认证方法,包括如下步骤:
api网关获取来自客户端的登录系统请求,所述登录系统请求携带客户端必要信息。
api网关向单点登录服务器发送验证请求,所述验证请求携带客户端必要信息。
单点登录服务器根据验证请求对客户端携带的必要信息进行验证,当验证结果为合法时,单点登录服务器生成令牌并将该令牌缓存在redis存储系统,同时通过api网关将所述令牌下发给客户端。
api网关获取来自客户端的访问资源请求,所述访问资源请求携带令牌。
api网关对所述令牌进行认证,当认证结果为通过时,授权客户端访问内部资源。
进一步,所述api网关在向单点登录服务器发送验证请求之前,还包括对客户端的登录系统请求进行校验的步骤,所述检验步骤为:
a、api网关根据客户端ip信息,校验该ip是否在白名单列表中,当该ip在白名单列表中时,返回客户端;否则,执行进一步校验。
b、api网关根据客户端请求头信息,校验该请求头是否携带该客户端必要信息,当该请求头携带该客户端必要信息时,将该登录系统请求转发给单点登录服务器,请求单点登录服务器对客户端身份予以验证;否则,向客户端返回错误信息及原因。
更进一步,所述必要信息包括客户端id、客户端key、用户名和密码。
更进一步,所述令牌包括头部、载荷和签证三个部分。
更进一步,所述头部承载了两部分信息,分别为数据类型和加密算法;所述载荷存放经过加密的有效信息;所述签证由头部和载荷加密后的信息以及一段密钥信息组成。
更进一步,所述有效信息为客户端id、客户端key、用户名或密码中的一种或几种。
更进一步,所述有效信息采用base64加密算法进行加密。
更进一步,所述api网关对所述令牌进行认证,该认证包括判断该令牌是否为空、判断该令牌内容是否与服务器端令牌内容一致、判断该令牌是否有效。
本发明的有益效果为:
本发明通过对客户端下发令牌,客户端在每次访问资源时均需要携带该令牌,并由api网关对客户端请求进行身份认证,达到鉴权目的;由于对令牌的认证在api网关本身,该令牌很难被破解或截取,提高了系统的安全性;同时,部分无效访问由api网关拦截并返回,减轻服务器端的负载。
附图说明
图1为本发明流程图;
图2为本发明方框图;
图3为本发明示例性实施例流程图。
具体实施方式
下面结合附图及具体实施例对本发明做进一步阐释。
基于网关路由转发的鉴权认证方法,参见图1和图2,该方法包括如下步骤:
s101、api网关获取来自客户端的登录系统请求,该登录系统请求携带客户端必要信息。必要信息包括客户端id、客户端key、用户名和密码。
必要信息为客户端与服务器端事先约定好的,在本实施例中,服务器端为单点登录服务器(ssoserver),必要信息包括客户端id、客户端key、用户名和密码。客户端请求登录系统时,必须在请求头携带客户端id、客户端key、用户名和密码等必要信息。
s102、api网关向单点登录服务器发送验证请求,该验证请求携带客户端必要信息。必要信息包括客户端id、客户端key、用户名和密码。
api网关在获取来自客户端的登录系统请求后,将该登录系统请求转发给单点登录服务器,向单点登录服务器发送验证请求,请求单点登录服务器对客户端身份予以验证。api网关向单点登录服务器发送验证请求时,请求头需携带客户端必要信息,该必要信息包括客户端id、客户端key、用户名和密码。
在一种实施例中,api网关在向单点登录服务器发送验证请求之前,还包括对客户端的登录系统请求进行校验的步骤。该校验步骤包括:
a、api网关根据客户端ip信息,校验该ip是否在白名单列表中,当校验结果为该ip在白名单列表中时,返回客户端;否则,则执行b步骤。
白名单列表在配置网关时保存于网关中,在白名单列表中的ip可直接登录及访问服务器资源,不需要鉴权,因此不需要下发令牌。
b、api网关根据客户端请求头信息,校验该请求头是否携带该客户端必要信息,如果请求头携带该客户端必要信息,则将该登录系统请求转发给单点登录服务器,请求单点登录服务器对客户端身份予以验证;如果请求头未携带该客户端必要信息,则向客户端返回错误信息及原因。必要信息包括客户端id、客户端key、用户名和密码。
s103、单点服务器根据验证请求对客户端携带的必要信息进行验证,当验证结果为合法时,单点服务器生成令牌并将该令牌缓存在redis存储系统,同时通过api网关将该令牌下发给客户端。
单点服务器根据验证请求对客户端携带的必要信息进行验证,如果验证结果为合法,则生成令牌。令牌生成后,将该令牌缓存在redis存储系统,并同时通过api网关返回并保存在客户端。令牌为客户端后续请求获取网关授权的唯一身份。如果验证结果为非法,则由api网关返回错误提示及原因给客户端。
api网关生成的令牌包含头部、载荷和签证三个部分。头部承载了两部分信息,分别为数据类型和加密算法,头部直接使用hmacsha256加密算法生成,然后经过base64加密得来。载荷存放经过加密的有效信息,该有效信息采用base64加密算法进行加密。有效信息可根据实际情况设定,可以是客户端id、客户端key、用户名和密码中的一种或几种,也可以是客户端id、客户端key、用户名和密码之外的其他信息。签证由头部和载荷加密后的信息以及一段密钥信息组成,密钥会在服务器端保存一份进行令牌的验证。
网关作为对外第一道门,负责路由转发,统一对所有请求的令牌验证。服务器端包含登录相关的处理,保存令牌需要在登录成功后,所以需要将令牌保存一份在服务器端。
s104、api网关获取来自客户端的访问资源请求,该访问资源请求携带令牌。
在api网关获取来自客户端的访问资源请求后,检测其是否携带令牌,如果没有携带令牌,则返回错误提示及原因。如果携带令牌,则执行下一步。
s105、api网关对该令牌进行认证,当认证结果为通过时,授权客户端访问内部资源。
api网关获取来自客户端的访问资源请求后,首先检测其是否携带令牌,如果携带令牌,则对该令牌进行认证,当认证结果为通过时,授权客户端访问内部资源,即根据客户端的请求,授权其访问对应资源服务器上的资源。当认证结果为不通过时,则返回错误提示及原因。
api网关对令牌的认证包括判断该令牌是否为空、判断该令牌内容是否与服务器端令牌内容一致、判断该令牌是否有效。当且仅当三者均为真值时,认证结果为通过,否则为不通过。在单点登录服务器生成令牌时,均为令牌赋予一个有效期,当超过该令牌有效期,则需要重新登录并获取令牌。在本实施例中,令牌有效期为30分钟。
本发明通过对客户端下发令牌,客户端在每次访问资源时均需要携带该令牌,并由api网关对客户端请求进行身份认证,达到鉴权目的;由于对令牌的认证在api网关本身,该令牌很难被破解或截取,提高了系统的安全性;同时,部分无效访问由api网关拦截并返回,减轻服务器端的负载。
客户端在每次成功登录系统后,均由单点登录服务器生成令牌,客户端在访问资源请求时均必须携带该令牌。在生成令牌时,可为令牌设置一个有效期,在令牌有效其内,客户端可携带该令牌请求访问资源;超过令牌有效期,客户端需要重新登录系统,并由单点登录服务器重新生成令牌。在本实施例中,令牌的有效期为30分钟。
下面结合附图3对本发明具体实施方式作进一步阐述:
1、客户端(client)发起访问服务器请求。
2、api网关拦截该访问请求,根据该客户端ip信息,校验该客户端是否在白名单列表中;如果该客户端ip在白名单列表中,则返回;如果该客户端ip不在白名单列表中,则执行步骤3。
如果客户端ip在白名单列表中,则该客户端不需要进行鉴权,可直接登录及访问服务器。
3、api网关校验该客户端是否请求登录服务器,如果是,则执行步骤4,如果否,则执行步骤7。
4、api网关校验该客户端请求头是否携带必要信息,必要信息包括客户端id(clientid)、客户端key(clientkey)、用户名和密码;如果请求头携带该必要信息,则将该客户端请求转发给单点登录服务器(ssoserver);如果请求头未携带该必要信息,则返回错误提示及原因。
5、单点登录服务器对客户端携带的必要信息进行校验,如果携带的必要信息合法,则执行步骤下一步,如果携带的必要信息为非法,则返回错误信息及原因。
6、单点登录服务器生成令牌并缓存在redis存储系统,同时向客户端下发该令牌并返回,结束该次访问。
7、api网关检测该请求头是否携带令牌,如果是,则执行下一步,如果否,则返回错误信息及原因,结束此次访问。
8、api网关对请求头携带的令牌进行认证,如果认证结果为合法,则返回客户端,允许客户端访问服务器资源,如果认证结果为不合法,则返回错误信息和原因,结束此次访问。
本发明不局限于上述可选的实施方式,任何人在本发明的启示下都可得出其他各种形式的产品。上述具体实施方式不应理解成对本发明的保护范围的限制,本发明的保护范围应当以权利要求书中界定的为准,并且说明书可以用于解释权利要求书。