我已经成功设置了Keycloak和公共/前端spring boot应用程序。一切都按预期进行。前端Spring Boot App在Keycloak中配置为领域中的客户端(app-ui),用户能够通过keycloak登录,令牌成功传递了一切。 Spring Security正在保护端点,并尊重端点的角色。
现在,我正在尝试在组合中添加一个下游Spring Boot App(Web服务),我希望它能够意识到已登录的用户能够保护对其的调用。前端Spring Boot App正在使用Feign Client调用后端Spring Boot App上的REST端点,但是后端没有进行任何身份验证/授权。
我有几个问题难以解决:
我希望看到一个演示或教程,它将使我所见过的How to integrate Keycloak and Spring Boot
向前迈进一步,以确保其他任何下游服务的安全。如果可以弄清楚,我会发布一个。
我假设可以通过后端Spring Boot App上的标准OAuth2配置完成此操作,但是我不确定如何建议采用这种架构。
这是我要设置的体系结构:
答案 0 :(得分:1)
如何设置前端Spring Boot应用程序以将经过身份验证的用户详细信息传递给后端Spring Boot App(RequestInterceptor / RestTemplate / Feign配置/ Http标头)?
您需要在http请求标头中传递承载令牌。
如何配置后端Spring Boot应用程序以使用它从上游Spring Boot App接收到的经过身份验证的用户详细信息,以及需要添加到后端Spring Boot App的哪些依赖项来简化该操作(org.keycloak:keycloak-spring-boot-starter和org.springframework.boot:spring-boot-starter-security)?
您需要在领域中添加新客户端,例如“后端客户端”,并将其“访问类型”设置为“仅承载者”。您还将需要'keycloak-spring-boot-starter'和'spring-boot-starter-security'依赖项,也需要在您添加的'keycloak-adapter-bom'中。 在application.properties中,您应该具有以下提到的属性
keycloak.realm =
keycloak.auth-server-url = your keycloak url
keycloak.ssl-required =external
keycloak.bearer-only=true
keycloak.resource =yout client name
keycloak.credentials.secret= your secret key
keycloak.security-Constraints[0].authRoles[0] = user
keycloak.security-Constraints[0].securityCollections[0].patterns[0] = /*
keycloak.cors=true
我需要在Keycloak中为后端Spring Boot应用程序配置什么吗?应该在Keycloak中将其注册为机密/非公开客户端(例如,app-api)吗?
您需要创建一个新客户端,并且应将其注册为“仅承载者”
您可以参考以下链接:https://www.keycloak.org/docs/3.2/securing_apps/topics/oidc/java/spring-boot-adapter.html