Skip to content

Commit cfb0115

Browse files
Merge pull request #46 from igorcampos-dev/feature/keycloak-OIDC
Feature/keycloak OIDC
2 parents 643dbb3 + 46ce8b6 commit cfb0115

File tree

18 files changed

+6256
-45
lines changed

18 files changed

+6256
-45
lines changed

spring-keycloak-example/Dockerfile

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,14 @@ RUN --mount=type=bind,source=pom.xml,target=pom.xml \
1818
./mvnw package -DskipTests && \
1919
mv target/$(./mvnw help:evaluate -Dexpression=project.artifactId -q -DforceStdout)-$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout).jar target/app.jar
2020

21-
FROM package as extract
21+
FROM eclipse-temurin:21.0.7_6-jre-jammy AS final
2222

23-
WORKDIR /build
23+
RUN apt-get update && apt-get install -y nginx supervisor && rm -rf /var/lib/apt/lists/*
24+
COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf
25+
COPY docker/nginx/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
2426

25-
RUN java -Djarmode=layertools -jar target/app.jar extract --destination target/extracted
27+
COPY --from=package /build/target/app.jar /app/app.jar
2628

27-
FROM eclipse-temurin:21.0.7_6-jre-jammy AS final
29+
EXPOSE 8083 8080
2830

29-
ARG UID=10001
30-
RUN adduser \
31-
--disabled-password \
32-
--gecos "" \
33-
--home "/nonexistent" \
34-
--shell "/sbin/nologin" \
35-
--no-create-home \
36-
--uid "${UID}" \
37-
appuser
38-
USER appuser
39-
40-
COPY --from=extract build/target/extracted/dependencies/ ./
41-
COPY --from=extract build/target/extracted/spring-boot-loader/ ./
42-
COPY --from=extract build/target/extracted/snapshot-dependencies/ ./
43-
COPY --from=extract build/target/extracted/application/ ./
44-
45-
EXPOSE 80
46-
47-
ENTRYPOINT [ "java", "org.springframework.boot.loader.launch.JarLauncher" ]
31+
ENTRYPOINT ["supervisord", "-n"]

spring-keycloak-example/Dockerfile.keycloak

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
FROM quay.io/keycloak/keycloak:26.3 AS builder
22

33
WORKDIR /opt/keycloak
4+
45
RUN /opt/keycloak/bin/kc.sh build
56

67
FROM quay.io/keycloak/keycloak:26.3

spring-keycloak-example/README.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,31 @@ Includes a minimal setup for running a Spring Boot application secured by Keyclo
1919

2020
## Authentication Types Implemented
2121

22-
- nothing
22+
### OIDC (OpenID Connect) via Keycloak
23+
24+
- **Description:** Authentication using Keycloak as the OpenID Connect (OIDC) identity provider.
25+
26+
- **Port:** `8083`
27+
28+
- **Spring Profile:** `OIDC`
29+
30+
- **Backup keycloak:** `oidc_auth_db_backup.sql`
31+
32+
- **User Credentials:**
33+
- Username: `oidc-user`
34+
- Password: `oidc-password`
35+
36+
- **Protected Route:** `/secured`
37+
38+
- **Realm:** `redirect-login-example`
39+
2340

2441
---
2542

2643
## Related Resources
2744

28-
| Description | Link |
29-
|---------------------------------|-----------------------------------------------------------------------|
30-
| Running Keycloak in a container | [keycloak.org/containers](https://www.keycloak.org/server/containers) |
45+
| Description | Link |
46+
|------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
47+
| Running Keycloak in a container | [keycloak.org/containers](https://www.keycloak.org/server/containers) |
48+
| Teaching how to set up Openid connect | [youtube/IW15Q68V50E](https://youtu.be/IW15Q68V50E?si=sJjvFoq8m0xL8xLn) |
49+
| Discussion about healthcheck configuration in keycloak container | [gist.github.com/sarath-soman](https://gist.github.com/sarath-soman/5d9aec06953bbd0990c648605d4dba07) |

spring-keycloak-example/compose.yaml

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,21 @@ services:
77
context: .
88
dockerfile: Dockerfile
99
environment:
10-
SERVER_PORT: 80
11-
SPRING_PROFILES_ACTIVE: "default"
10+
SERVER_PORT: 8083
11+
SPRING_PROFILES_ACTIVE: "OIDC"
12+
AUTH_CLIENT_ID: oidc-client
13+
AUTH_CLIENT_SECRET: pvRQkTKcE2zZw9vxT30oXC1Zynq2b3yw
14+
AUTH_SCOPE: openid, profile, email
15+
AUTH_GRANT_TYPE: authorization_code
16+
AUTH_REDIRECT_URI: "{baseUrl}/login/oauth2/code/{registrationId}"
17+
AUTH_ISSUER_URI: http://localhost:8080/realms/redirect-login-example
1218
ports:
13-
- "80:80"
19+
- "8083:8083"
1420
depends_on:
15-
- keycloak
21+
keycloak:
22+
condition: service_healthy
23+
networks:
24+
- spring_keycloak
1625

1726
keycloak:
1827
container_name: keycloak
@@ -22,7 +31,10 @@ services:
2231
ports:
2332
- "8080:8080"
2433
environment:
25-
KC_DB: dev-file
34+
KC_DB: postgres
35+
KC_DB_URL: jdbc:postgresql://keycloak-database:5432/oidc_auth_db
36+
KC_DB_USERNAME: postgres
37+
KC_DB_PASSWORD: password
2638
KC_HTTP_ENABLED: "true"
2739
KC_HTTP_PORT: "8080"
2840
KC_HOSTNAME: localhost
@@ -33,4 +45,29 @@ services:
3345
KC_HTTPS_CERTIFICATE_FILE: /opt/keycloak/certs/tls.crt
3446
KC_HTTPS_CERTIFICATE_KEY_FILE: /opt/keycloak/certs/tls.key
3547
volumes:
36-
- ./docker/keycloak:/opt/keycloak/certs
48+
- ./docker/keycloak/certs:/opt/keycloak/certs
49+
depends_on:
50+
- keycloak-database
51+
healthcheck:
52+
test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;"]
53+
interval: 5s
54+
timeout: 10s
55+
retries: 10
56+
networks:
57+
- spring_keycloak
58+
59+
keycloak-database:
60+
image: postgres:14.18-alpine3.22
61+
container_name: keycloak-database
62+
environment:
63+
POSTGRES_USER: postgres #⚠️ DO NOT USE IN PRODUCTION
64+
POSTGRES_PASSWORD: password #⚠️ DO NOT USE IN PRODUCTION
65+
ports:
66+
- "5432:5432"
67+
volumes:
68+
- ./docker/keycloak/backups/oidc_auth_db_backup.sql:/docker-entrypoint-initdb.d/init.sql
69+
networks:
70+
- spring_keycloak
71+
72+
networks:
73+
spring_keycloak:

0 commit comments

Comments
 (0)