在API网关(香港总部)+密钥斗篷+Spring引导微服务管理授权



我正在开发一个微服务体系结构,其中我使用了以下组件:

  1. 作为API网关的KongHQ
  2. Keycloft作为IAM解决方案
  3. 用Spring Boot编写的微服务

我的基本要求是将身份验证/授权与Spring引导微服务完全解耦。因此,API的认证和授权应在API网关层进行。大多数文章和教程都建议将Key斗篷与Spring Boot集成在一起。我真的很想知道这个要求是否可行,如果可行,如何做到?

我不会将安全性与微服务分离,原因有两个:

  • 访问控制是我想要进行单元测试的业务需求
  • spring-security可能比任何API网关安全过滤器都更强大(可表达、可测试等(

您不必将Key斗篷与spring-boot集成(实际上您不应该这样做,因为用于spring的Key斗篷库已被弃用(。

Spring security有用于资源服务器的工具。在这里取样。

我还在spring-boot-starter-oauth2-resource-server之上编写了(非常(薄层,以简化资源服务器配置。大多数配置选项都可以从属性中获得,这些属性在微服务中保存了相当多的Java代码。在那里取样。

按照高级教程,您甚至可以构建一个像@PreAuthorize("is(#username) or isNice() or onBehalfOf(#username).can('greet')")一样富有表现力的安全DSL。祝你好运,用API getway实现同样的目标。

上面链接的repo还包含一些用于配置单元测试安全上下文的注释:

@Test
@ProxiesAuth(
authorities = { "AUTHOR" },
claims = @OpenIdClaims(preferredUsername = "Tonton Pirate"))
void whenHimselfThenCanGreetFor() throws Exception {
mockMvc.get("/greet/on-behalf-of/Tonton Pirate").andExpect(status().isOk()).andExpect(content().string("Hi Tonton Pirate from Tonton Pirate!"));
}

下面是一篇非常详细的文章,介绍API网关和密钥斗篷的使用:https://apisix.apache.org/blog/2022/07/06/use-keycloak-with-api-gateway-to-secure-apis/

最新更新