Microservice中的安全策略

最近在思考微服务中的安全问题,在读Chris Richardson的文章的时候,发现自己对微服务有了一些新的认识和理解:p。

如图所示是一个典型的微服务架构:

Figure 1: Problem
Problem

这个架构下有如下的需求场景:

BFF和API Gateway

在微服务架构中,有两个比较常用的概念是“API Gateway”和“Backend for Frontend(BFF)”,实际上是为了解决不同的问题而产生的解决方法:

一直以来比较困扰我的是,API Gateway和BFF这两个东西究竟应该如何使用,是应该把API Gateway放在入口,让所有消费者像消费一个单体服务一样来消费微服务;还是应该将“BFF”本身作为一个微服务,跟其他服务一样藏在API gateway之后呢?

Figure 2: API Gateway vs BFF
API Gateway vs BFF

之前的实践方式通常为一个API Gateway用Zuul实现,一个BFF就是一个正常的微服务,正是受限于这种方式导致一直以来我的误解是,API Gateway和BFF是两个不同的东西,是分开部署的;而没有思考这两个东西其实是解决不同维度的问题而产生的,其实是可以共存的一个概念。

Figure 3: API Gateway vs BFF
API Gateway vs BFF

如上所示,第一种方法是对于不同的应用分别定制不同的BFF,这里实际上BFF也可以充当API Gateway的作用;而第二种对于不同的APP使用相同的API Gateway,同样也可以在其中实习定制化的逻辑,为消费者提供优化后的API。

安全控制

Figure 4: OAuth2 in Microservices
OAuth2 in Microservices

如图所示,是一个使用Oauth2标准的授权访问流程,这里有几点值得关注:

References: