现在是这么一个情况:在我的微服务中,有多个业务服务以及一些微服务相关的基础服务。他们都注册到了eureka。并且,通过zuul网关都可以访问到每个业务服务提供的API。现在,这些API中99%的,需要认证之后才能访问到。
简单的说就是,不能随便输入一个地址,就能访问到我微服务的内容。
由于这些服务都做好了,所以我尽量不动这些服务的代码。采用security+oauth2的方式来进行安全保护。


实现方式

首先明白一点,Spring OAuth2是基于security来实现的。而Spring OAuth2分为两部分:OAuth2 Provider和OAuth2 Client。
OAuth2 Provider的角色被分为授权服务(Authorization Service)和资源服务(Resource Service)。这两个角色可以在一个服务中,也可以不在一个服务中,也可能是一个授权服务,对应多个资源服务。
我采用的就是授权服务和资源服务分离的方式。

授权服务

授权服务我选择单独新建一个应用来实现,而不是直接加入到zuul网关服务中,毕竟这是两个东西,而且网关服务中做的事情也比较多了。
所以,在我的架构中,授权服务仅仅是处理授权方面的事情。比如:颁发token,刷新token等等;
因此,资源的保护,还是交由各个服务直接来管理,即资源服务就是每个微服务自身。
详见:SpringCloud微服务——基于security+oauth2的安全保护(二):授权服务

资源服务

每个服务作为资源服务,有三个问题:

  1. 如何加入jar包;
  2. 如何加入资源服务的配置类;
  3. 如何加入资源服务的配置(application.properties的配置);

关于在application.properties的配置中的相关配置,因为有配置中心config服务,所以 ,也就变得很简单了。一个sql就搞定。

关于这个jar包的问题,总不能说在每个业务项目中都写一遍吧。还好,在我的整个项目中都引入了一个公共项目的jar包(就是一些工具类组成的项目,然后打成jar包,引入到每个需要用到的服务中)。所以,只要在这个公共的项目中,引入依赖包就可以了。另外,加入资源服务的配置类也是如此,在这个公共项目中写好,就可以引入其他的服务了。
详见:SpringCloud微服务——基于security+oauth2的安全保护(三):资源服务

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐