本发明涉及微服务技术,尤其涉及一种微服务架构中会话转发的实现方法。
背景技术:
在现实场景中使用微服务时,安全是十分常见的要求。在实现服务的安全时,通常采用oauth2或openidconnect开放协议,它们可以为几乎所有类型如基于web、mobile等的客户端应用提供身份验证的方法,并且具有通用性、平台无关性。
基于oauth2或openidconnect协议的实现方法中,由于尚未公开一种完全的方案,特别是在服务和服务间的调用中如何转发已经认证的用户身份,给微服务安全的实际实现中造成了一些困难或重复的设计。
技术实现要素:
为了解决以上技术问题,本发明提出了一种微服务架构中会话转发的实现方法,从而实现服务调用的安全认证,为微服务安全的设计和实现提供一种参考。
本发明的技术方案是:
一种微服务架构中会话转发的实现方法,
在微服务架构中,服务的调用包含客户端应用对服务的调用、一个服务对另外一个服务的调用,包括
提供微服务架构中客户端应用调用服务的安全认证;
提供微服务架构中服务间调用的安全认证;
采用aop即面向切面编程的编程范式。
进一步的,
从客户端应用中获取到会话信息,添加到调用服务的请求中,以实现客户端调用服务的安全认证。
在服务应用中,从客户端应用的原始请求中获取会话,并存储到线程变量中。
进一步的,
从服务应用的线程变量中获取到会话信息,添加到调用服务的请求中,以实现服务间调用的安全认证。
进一步的,
将aop的编程范式应用到服务调用中,以提高程序的可扩展性和可重用性。
进一步的,
具体如下:
对于客户端应用调用服务:
在客户端应用中,基于oauth2或openidconnect实现用户认证,并且认证成功后在该客户端应用中存储当前用户的会话;
开发一个clientrequestinterceptor即客户端请求拦截器并添加到客户端应用中,对客户端应用调用服务时发出的请求进行拦截,然后从会话中获取到token,并将token添加到请求的header中;
在服务应用中,基于oauth2或openidconnect实现用户身份校验,即在被调用的服务中,从客户端应用请求header中获取token,解析出用户信息。
所述token中包含用户身份信息,或者凭token调用额外的用户服务获取身份信息。
对于服务a调用另外一个服务b:
在服务a中,处理原始的客户端应用请求,从header中获取token并校验用户身份,校验成功后,将token存储在线程变量中;
开发一个servicerequestinterceptor即服务请求拦截器并添加到每个服务应用中,对服务a调用服务b时发出的请求进行拦截,先从线程变量中获取到token,然后将token添加到请求的header中;
在如服务b中,从token中解析出用户信息。
本发明实现了微服务架构中客户端调用服务,以及服务间调用的会话转发。
本发明的有益效果是:
1)、本发明可以实现微服务架构中客户端应用调用服务的安全认证。
2)、本发明可以实现微服务架构中服务间调用的安全认证。
3)、本发明采用aop的编程范式,服务安全的代码与业务代码分离,有利于程序的可扩展性和可重用性。
附图说明
图1是微服务架构中的服务调用示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实现微服务架构中客户端调用服务,以及服务间调用的会话转发。
从客户端应用中获取到会话信息,添加到调用服务的请求中,以实现客户端调用服务的安全认证。
在服务应用中,从客户端应用的原始请求中获取会话,并存储到线程变量中。
从服务应用的线程变量中获取到会话信息,添加到调用服务的请求中,以实现服务间调用的安全认证。
将aop的编程范式应用到服务调用中,以提高程序的可扩展性和可重用性。
在微服务架构中,服务的调用包含客户端应用对服务的调用、一个服务对另外一个服务的调用,如图1所示,
黑色填充的菱形方块表示客户端应用中的请求拦截器;
黑色填充的正方形方块表示服务应用中的请求拦截器。
技术实现方案如下:
(一)对于客户端应用调用服务:
在客户端应用中,基于oauth2或openidconnect实现用户认证,并且认证成功后在该客户端应用中存储当前用户的会话;
开发一个clientrequestinterceptor(客户端请求拦截器)并添加到客户端应用中,对客户端应用调用服务时发出的请求进行拦截,然后从会话中获取到token(token中包含用户身份信息,或者可以凭token调用额外的用户服务获取身份信息),并将token添加到请求的header中;
在服务应用中,基于oauth2或openidconnect实现用户身份校验,即在被调用的服务中,从客户端应用请求header中获取token,解析出用户信息。
(二)对于一个服务(如服务a)调用另外一个服务(如服务b):
在一个服务(如服务a)中,处理原始的客户端应用请求,如(一)中所述,从header中获取token并校验用户身份,校验成功后,将token存储在线程变量中;
开发一个servicerequestinterceptor(服务请求拦截器)并添加到每个服务应用中,对一个服务(如服务a)调用其他服务(如服务b)时发出的请求进行拦截,先从线程变量中获取到token,然后将token添加到请求的header中;
在其他服务(如服务b)中,如(一)中所述从token中解析出用户信息。
本发明基于oauth2或openidconnect实现用户认证,使用开源框架如springsecurity。也可以按照这些开放协议自研。
服务的设计,基于restfulapi风格。
服务的开发,基于springframework。也可以使用其他语言和框架。
客户端应用调用服务,以及一个服务调用另外一个服务,可以基于feignrequestinterceptor接口。也可以使用apachehttpclient或springframeworkresttemplate进行扩展开发。
以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。