使用 Spring Boot 的微服务中的安全问题

Posted

技术标签:

【中文标题】使用 Spring Boot 的微服务中的安全问题【英文标题】:Security issue in microservices with Spring Boot 【发布时间】:2018-03-18 13:00:55 【问题描述】:

我对 Spring Boot(和一般)中微服务的安全性有误解。我想使用 Spring 框架和微服务构建一个项目,但在架构规划中我卡住了。微服务的安全性到底应该如何?在我看来,所有项目都应该是一个组件,所有请求都会抛出该组件并传播到其他组件。我能找到它是 Spring Cloud Zuul,它是微服务中的 api 网关,我想创建一个项目来响应网关并在组件中添加安全性。我的意思是它类似于一个包含 Spring Cloud Zuul、Spring Security、Spring Data JPA 依赖项的项目。您如何看待提供安全性的好方法?是否可以构建类似的东西?

【问题讨论】:

您可以在网关中添加身份验证,您是否查看过 JSON Web Tokens?您可以在网关上验证和管理令牌,然后将它们传递给各个服务。 如果我在网关组件中添加安全配置并对用户进行验证,这不是问题,而是如何为其他服务中的方法添加安全性。我的意思是例如@PreAuthorize() @PostAutorize() 等。我只想在一个地方添加安全配置以及与此相关的所有内容。我没有想象如何做到这一点。我不想在所有服务中复制安全配置 【参考方案1】:

我认为这里的答案可能对你有所帮助,他们正在谈论使用防火墙来限制来自出站 IP 的访问,并且只允许 zuul 网关访问所有微服务。

Don't allow direct calls to Microservices. Only allow through API Gateway

【讨论】:

【参考方案2】:

在我参与的项目中,我们在几个不同级别使用了安全性:

Zuul 中单个路由级别的安全性。 每个内部服务的安全性

这是我们 Spring Cloud 项目中使用的安全模型的流程图,

    当 Zuul 收到请求时,它会检查该请求是否存在路由。 如果存在路由,则根据自定义配置检查路由是否安全。 如果路由是安全的,则对请求进行身份验证。 在 Zuul 对请求进行身份验证后,Zuul 会根据配置再次检查要将请求路由到的内部服务是否受到保护。 如果内部服务是安全的,则在将服务路由到内部服务之前,根据用户凭据(存储在自定义配置中)创建一个新的身份验证标头。 一旦内部服务收到来自 Zuul 的请求,它会检查该请求是否需要进行身份验证。 通过身份验证后,处理请求并将响应发回。

【讨论】:

【参考方案3】:

我认为您可以考虑使用 OAuth。 它使用 JWT(Jason Web 令牌),这是与所有请求/响应一起传递的令牌。 您可以在这里找到详细信息:https://nordicapis.com/api-security-oauth-openid-connect-depth/

【讨论】:

以上是关于使用 Spring Boot 的微服务中的安全问题的主要内容,如果未能解决你的问题,请参考以下文章

如何理解spring boot中的微服务架构的体现

如何在 spring-boot 中的微服务中创建 Super/Base/Parent 类 - 在子类中扩展该类

Spring boot 2.0.3 + 安全 + Oauth2 自动配置

使用 Spring Boot 和 Spring Cloud 的微服务项目结构

基于 Spring Boot 的微服务集成测试

基于Spring Cloud的微服务构建学习-2 Spring Boot