Spring Boot 在API Gateway(Kong HQ)+ Keycloak + Sping Boot boot微服务上管理授权

wz1wpwve  于 2023-10-16  发布在  Spring
关注(0)|答案(2)|浏览(184)

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

  1. KongHQ作为API网关
  2. Keycloak作为IAM解决方案
    1.使用Sping Boot 编写的微服务。
    我的基本要求是将身份验证/授权与Sping Boot 微服务完全解耦。因此,API的认证和授权应该在API网关层完成。大多数文章和教程都建议将Keycloak与Sping Boot 集成。我真的很想知道这个要求是否可行,如果可行,如何做到这一点?
7kqas0il

7kqas0il1#

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

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

你不必将Keycloak与spring-boot集成(实际上你不应该这样做,因为Keycloak libs for spring are deprecated)。
Spring-security为资源服务器提供了工具。Sample here
我还在spring-boot-starter-oauth2-resource-server之上编写了(very)薄层,以简化资源服务器配置。大多数配置选项都可以从属性中获得,这在微服务中保存了相当多的Java代码。Sample there
advanced tutorial之后,您甚至可以构建一个与@PreAuthorize("is(#username) or isNice() or onBehalfOf(#username).can('greet')")一样有表现力的安全DSL。祝你好运,以实现同样的API getway。
上面链接的repo还包含了很多用于配置单元测试安全上下文的注解:

  1. @Test
  2. @ProxiesAuth(
  3. authorities = { "AUTHOR" },
  4. claims = @OpenIdClaims(preferredUsername = "Tonton Pirate"))
  5. void whenHimselfThenCanGreetFor() throws Exception {
  6. mockMvc.get("/greet/on-behalf-of/Tonton Pirate").andExpect(status().isOk()).andExpect(content().string("Hi Tonton Pirate from Tonton Pirate!"));
  7. }
展开查看全部
disbfnqx

disbfnqx2#

这里有一篇非常详细的文章介绍了API Gateway和keycloak的使用:https://apisix.apache.org/blog/2022/07/06/use-keycloak-with-api-gateway-to-secure-apis/

相关问题