Spring 带有 keycloak 的云微服务

Spring Cloud microservice with keycloak

我有一个 spring 云微服务项目,它使用 Spring Cloud Config Server 管理配置,使用 Eureka Server 进行服务发现。

在我想使用 keycloak 添加新的微服务之前,我的应用程序运行良好。这个新的微服务只是我的 Vue 前端应用程序的休息 API,用户管理预计将由 Keycloak 处理。

新服务运行正常并将自身注册到 Eureka 直到我将 keycloak 依赖项添加到项目中。应用程序不会崩溃或抛出任何错误,启动正常并将自身注册到 Eureka,但在 Spring 启动管理服务器面板上我看到应用程序已关闭。

这是我的新服务的 .properties 文件。

eureka.instance.preferIpAddress=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
eureka.instance.leaseRenewalIntervalInSeconds=3
eureka.client.eureka-connection-idle-timeout-seconds=3
eureka.client.fetchRegistry=true

spring.boot.admin.client.url=http://localhost:6060
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

server.port=8082

keycloak.auth-server-url=http://localhost:8080/auth
keycloak.realm=microservices
keycloak.resource=microservices-app
keycloak.public-client=true

keycloak.security-constraints[0].authRoles[0]=user
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/*
keycloak.cors=true

这是我对新服务的依赖。

...
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
        <version>4.8.3.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.keycloak.bom</groupId>
            <artifactId>keycloak-adapter-bom</artifactId>
            <version>4.8.3.Final</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Spring云版本为Hoxton.SR1

Spring 引导版本是 2.2.2.RELEASE

我尝试添加 Spring 安全性并使用 KeycloakAuthenticationProvider 进行 java 配置,但没有帮助。

在整个项目中,我有很多由 Spring Cloud 版本或 Spring Cloud-Spring Boot Admin 交互引起的奇怪错误,因此更改版本或向配置添加一个小参数文件通常可以解决问题,我怀疑这个 Keycloak 问题会以同样的方式解决。

Spring Boot Admin 使用执行器端点,尽量让它们不受保护:

    keycloak.security-constraints[0].authRoles[0]=user
    keycloak.security-constraints[0].securityCollections[0].patterns[0]=/*
    keycloak.security-constraints[0].securityCollections[1].patterns[0]=/actuator
    keycloak.security-constraints[0].securityCollections[1].patterns[1]=/actuator/*