一种基于JWK的API网关鉴权的系统及方法
文献发布时间:2024-04-18 19:59:31
技术领域
本发明涉及云原生技术领域,具体为一种基于JWK的API网关鉴权的系统及方法。
背景技术
API网关是云原生领域的基础设施,是托管众多云原生服务的重要组件。它对外提供统一的流量入口,对内为托管的服务提供认证、鉴权、限流等功能支持,它监控服务的流量变化、性能状况,是云原生系统必不可少的存在。
现有技术中,API网关的鉴权是API网关安全托管能力的重要体现。在实际情况中,API网关托管的API,仅能提供给特定的消费者。通常的做法是,API携带表征用户身份的token或者是表征客户端应用的token,由API网关验证,如果验证通过则可以正常的访问API,否则提示没有权限。这样,API网关就建立了用户认证或者APP认证机制,实现API的鉴权功能。
但是,在API网关的APP认证中,通常的做法是API网关为客户端提供认证凭据(APP_KEY/APP_SECRET),客户端根据凭据生成token,然后在调用服务API时被API网关验证。如果期望几种客户端采用相同的鉴权策略访问API,或者是希望客户端可以选用不同的鉴权策略,仅仅依靠APP_KEY/APP_SECRET的方式便不能支持。
发明内容
本发明的目的在于提供一种基于JWK的API网关鉴权的系统及方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种基于JWK的API网关鉴权的系统,所述系统由JWK管理模块、客户端管理模块、鉴权模块以及API管理模块组成;
JWK管理模块,负责JWK的生成;
客户端管理模块,管理众多的客户端;
鉴权模块,提供不同的鉴权策略,鉴权策略的核心内容是JWK;
API管理,负责管理托管服务的API。
优选的,JWK管理模块为鉴权模块的鉴权策略提供支持,为客户端管理模块的SDK提供支持,管理模块同时提供JWK及对应密钥的下载功能。
优选的,管理模块为没有在API网关注册的客户端提供并非直接可用的SDK,而是SDK的模板,用户根据JWK管理模块下载的JWK或密钥,借助SDK模板,对客户端进行改造。
优选的,在鉴权策略中,使用多种JWK;在鉴权过程中,多种JWK之间是“或”的关系,也就是如果API所携带的JWT,被一种JWK验证通过,就认为鉴权成功。
优选的,鉴权模块除了建立鉴权策略之外,还对客户端访问托管服务API时携带的JWT进行鉴权;当客户端访问托管服务API的请求进入API网关之后,API网关根据API绑定的鉴权策略的JWK生成对应的密钥,API网关会根据鉴权策略中约定的JWT的位置和名称获取JWT,并通过生成的密钥验证JWT。
优选的,当API未与鉴权策略绑定之前,调用API时并不需要携带JWT即可正常访问;当API与鉴权策略绑定之后,调用API时必须携带JWT才可正常访问,否则提示401错误。
一种基于JWK的API网关鉴权方法,所述方法包括以下步骤:
JWK管理模块生成所需要的JWK;
客户端管理模块注册客户端;
客户端建立与JWK之间的关联;
鉴权模块通过JWK创建鉴权策略;
创建托管服务API;
鉴权策略绑定托管服务API;
客户端下载SDK,并改造客户端;
使用改造的客户端访问托管服务API。
与现有技术相比,本发明的有益效果是:
本发明提出的基于JWK的API网关鉴权的系统及方法,基于JWK进行的网关鉴权,支持对称加密、非对称加密的多个算法族,供用户选择;JWK与客户端是一对多关系,鉴权策略与托管API是一对多的关系,可以建立可复用的鉴权策略;鉴权策略可以灵活配置,并且支持对JWT中payload内容的参数转换,以满足业务需要;为客户端提供SDK下载,方便客户端的改造,易于用户使用。
附图说明
图1为本发明系统架构图;
图2为本发明方法流程图。
具体实施方式
为了使本发明的目的、技术方案进行清楚、完整地描述,及优点更加清楚明白,以下结合附图对本发明实施例进行进一步详细说明。应当理解,此处所描述的具体实施例是本发明一部分实施例,而不是全部的实施例,仅仅用以解释本发明实施例,并不用于限定本发明实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
请参阅图1,本发明提供一种技术方案:一种基于JWK的API网关鉴权的系统,所述系统由JWK管理模块、客户端管理模块、鉴权模块以及API管理模块组成;
系统功能结构图如图1所示。下面对系统的具体功能进行详细说明。
1.JWK管理模块
JWK管理模块负责JWK的生成,既为鉴权模块的鉴权策略提供支持,又为客户端管理模块的SDK提供支持。该管理模块同时提供JWK及对应密钥的下载功能。
JWK(JSON Web Key)是一种JSON结构,表示一种加密密钥,由IETF定义。下面是RS256算法的JWK表示(部分内容由于太长,这里以星号表示)
不同的算法,JWK的参数并不相同。
1)鉴权策略
鉴权策略所需的JWK,与上述生成的JWK有所区别。对于像HS256(HS384/HS512,算法族相同,算法长度不同),由于它属于对称加密算法,因此鉴权策略所需的JWK与管理模块生成的JWK相同。但是对于非对称加密算法,比如RSA256(RS384/RS512),或者是ES256等,鉴权策略所需的JWK仅需要公钥部分即可,如下所示
2)客户端SDK
客户端SDK,需要使用完整的JWK,然后将其置换为签发JWT所需的密钥。对于对称算法来说,密钥为一个;对于非对称加密来说,密钥分为公钥和私钥。客户端通过密钥生成JWT,并将其作为API的请求头,用以调用API。下面以RSA256的JWT加密公式进行说明
2.客户端管理模块
客户端管理模块主要是管理众多的客户端。之前的客户端会生成相应的APP_KEY/APP_SECRET,这里对其功能进行保留,并在其基础上维护客户端与JWK之间的关系。
客户端与JWK之间的关系是多对一的关系。也就是一个JWK也可以被多个客户端使用,但是一个客户端仅能使用一种JWK。客户端所需的SDK就是在客户端管理模块下载。
在客户端管理模块存在匿名客户端(或称为默认客户端),主要是面向没有在API网关注册的客户端,但是仍然希望使用API网关鉴权的客户端。针对此类客户端,管理模块为其提供并非直接可用的SDK,而是SDK的模板。用户可以根据JWK管理模块下载的JWK或密钥,借助SDK模板,对客户端进行改造。
3.鉴权模块
鉴权模块提供不同的鉴权策略,鉴权策略的核心内容是JWK。在鉴权策略中,可以使用多种JWK(如果是非对称加密,仅使用JWK的公钥部分)。在鉴权过程中,多种JWK之间是“或”的关系,也就是如果API所携带的JWT,能够被一种JWK验证通过,就认为鉴权成功。
在鉴权策略中,可以提供一些扩展性能力,比如可以指定JWT的位置。之前在说明时,为方便叙述,假定API携带的JWT是在请求头位置。而在这里可以根据鉴权策略,约定JWT的位置,它可以位于请求头,请求参数,甚至是请求体中,具体视需要而定。同时,除了可以约定JWT的位置,也可以约定JWT的名称,比如可以将JWT放在请求头,名称为X-Token。以上这些配置,可以在客户端出现JWT名称占用,或者不能提供请求头的位置时,提供相应的解决办法,体现了策略设置的灵活性。
除此之外,由于JWT中是可以携带一些信息的(主要位于payload中),因此可以在策略中对payload的信息进行参数转换设置,以方便用户使用。
建立鉴权策略之后,需要将策略与待调用的托管服务API绑定。鉴权策略与API之间也是一对多的关系,即一个鉴权策略可以被多个API绑定,而一个API仅能绑定一个鉴权策略。
鉴权模块除了建立鉴权策略之外,还需要对客户端访问托管服务API时携带的JWT进行鉴权。因此,鉴权模块是本发明的核心模块。当客户端访问托管服务API的请求进入API网关之后,API网关会根据该API绑定的鉴权策略的JWK生成对应的密钥(如果是非对称加密算法,密钥仅是公钥)。API网关会根据鉴权策略中约定的JWT的位置和名称获取JWT,并通过生成的密钥验证JWT。
不同算法的验证方法不同,对于对称加密(HS256等),可以按照JWT的生成过程,再次执行一遍生成签名,然后比较签名是否相同,如果相同,则可以正常访问API。对于非对称加密(RSA256等),则可以直接用公钥对签名进行验证,如果验证通过,则可以正常访问API。
4.API管理模块
API管理主要负责管理托管服务的API。当API未与鉴权策略绑定之前,调用API时并不需要携带JWT即可正常访问;当API与鉴权策略绑定之后,调用API时必须携带JWT才可正常访问,否则提示401错误(未予以授权)。
上面对API网关的主要模块功能进行了详细说明,至于客户端的改造这里不作过多说明。只要确定当客户端访问托管服务的API时,需要携带JWT。
实施例二
在实施例一的基础上,参照附图2,提出了一种基于JWK的API网关鉴权方法,所述方法包括以下步骤:
JWK管理模块生成所需要的JWK;
客户端管理模块注册客户端;
客户端建立与JWK之间的关联;
鉴权模块通过JWK创建鉴权策略;
创建托管服务API;
鉴权策略绑定托管服务API;
客户端下载SDK,并改造客户端;
使用改造的客户端访问托管服务API。
实施例三
在实施例二的基础上,JWK管理模块生成JWK、客户端管理模块注册客户端并建立与JWK的关联、鉴权模块创建鉴权策略并对API进行鉴权、API管理模块绑定鉴权策略、客户端下载SDK并完成改造;
JWK管理模块生成JWK,它是整个系统的基础模块;客户端管理模块在注册客户端之后,需要建立与JWK的关联;鉴权模块根据JWK创建鉴权策略;在创建鉴权策略之后,API管理模块会将策略与API绑定;客户端会下载JWK对应的SDK,并改造客户端;当客户端携带JWT访问API时,会由鉴权模块完成验证操作。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。