Spring Cloud Gateway using Keycloak Successful Login, but what's the next step?

Viewed 1028

I managed to get the keycloak default login:

enter image description here

After successful login, keycloak redirect to uri: {hostname}/oauth2/authorization/keycloak. I'm just not sure where did that come from? Where's the setting in the Keycloak that can change that? I have my redirect uri in keycloak client set to: http://localhost/*. That doesn't do it. Wh

Here're my pom:

<properties>
    <java.version>11</java.version>
    <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
</properties>
...
        <!-- gateway -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>       
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- end of gateway -->

    <!-- using CircuitBreaker -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
    </dependency>
    <!-- end of CircuitBreaker -->      

    <!-- oauth2 keycloak -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-security</artifactId>
    </dependency>
    <!-- end of oauth2 keycloak -->

This is my gateway and keycloak settings in application.properties:

#Gateway
spring.cloud.gateway.routes[0].id=person
spring.cloud.gateway.routes[0].uri=http://localhost:8022/
spring.cloud.gateway.routes[0].predicates[0].name=Path
spring.cloud.gateway.routes[0].predicates[0].args[pattern]=/personprocess/**
spring.cloud.gateway.routes[0].filters[0].name=CircuitBreaker
spring.cloud.gateway.routes[0].filters[0].args[name]=myCircuitBreaker
spring.cloud.gateway.routes[0].filters[0].args[fallbackUri]=forward:/myCircuitBreaker/inCaseOfFailureUseThis
spring.cloud.gateway.routes[1].id=keycloak
spring.cloud.gateway.routes[1].uri=http://localhost:8180/
spring.cloud.gateway.routes[1].predicates[0].name=Path
spring.cloud.gateway.routes[1].predicates[0].args[pattern]=/auth/**
spring.cloud.gateway.routes[1].filters[0].name=TokenRelay
spring.cloud.gateway.routes[1].filters[1].name=RemoveRequestHeader
spring.cloud.gateway.routes[1].filters[1].args[name]=Cookie

#Keycloak
spring.security.oauth2.client.registration.keycloak.client-id=gateway-app
spring.security.oauth2.client.registration.keycloak.client-secret=f52b34e1-3cae-4de7-83ae-2d795e3b72d7
spring.security.oauth2.client.registration.keycloak.clientName=gateway-app
spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.keycloak.redirectUri=http://localhost/personprocess/
spring.security.oauth2.client.provider.keycloak.authorization-uri=http://localhost:8180/auth/realms/gateway-realm/protocol/openid-connect/auth
spring.security.oauth2.client.provider.keycloak.token-uri=http://localhost:8180/auth/realms/gateway-realm/protocol/openid-connect/token
spring.security.oauth2.client.provider.keycloak.user-info-uri=http://localhost:8180/auth/realms/gateway-realm/protocol/openid-connect/userinfo
spring.security.oauth2.client.provider.keycloak.jwk-set-uri=http://localhost:8180/auth/realms/gateway-realm/protocol/openid-connect/certs
spring.security.oauth2.client.provider.keycloak.user-name-attribute=

I have tested the security token using Postman, and it is all valid. What's the next step?

1 Answers

I found out that you can't mix gateway and spring security in a single pom.

The solution is to split the the apps into a gateway and a spring security.

Related