Skip to content

Commit bce7ad7

Browse files
Merge branch 'main' into add-smtp-oauth
2 parents e0ae25d + 1ca5cb4 commit bce7ad7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1532
-175
lines changed

.github/workflows/codeql-analysis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
uses: actions/checkout@v5
5050

5151
- name: Set up Go
52-
uses: actions/setup-go@v5
52+
uses: actions/setup-go@v6
5353
with:
5454
go-version-file: 'go.mod'
5555
cache: true

.github/workflows/dependency-submission.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
uses: actions/checkout@v5
1818

1919
- name: Set up Go
20-
uses: actions/setup-go@v5
20+
uses: actions/setup-go@v6
2121
with:
2222
go-version-file: 'go.mod'
2323
cache: true

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
uses: actions/checkout@v5
3232

3333
- name: Set up Go
34-
uses: actions/setup-go@v5
34+
uses: actions/setup-go@v6
3535
with:
3636
go-version-file: 'go.mod'
3737
cache: true

.github/workflows/test.yml

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
fetch-depth: 2 # we want the HEAD commit and the previous commit to compare changed files
2424

2525
- name: Set up Go
26-
uses: actions/setup-go@v5
26+
uses: actions/setup-go@v6
2727
with:
2828
go-version-file: 'go.mod'
2929
cache: true
@@ -52,7 +52,7 @@ jobs:
5252
strategy:
5353
matrix:
5454
keycloak-version:
55-
- '26.3.3'
55+
- '26.3.4'
5656
- '26.2.5'
5757
- '26.1.4'
5858
- '26.0.8'
@@ -69,7 +69,7 @@ jobs:
6969
uses: actions/checkout@v5
7070

7171
- name: Set up Go
72-
uses: actions/setup-go@v5
72+
uses: actions/setup-go@v6
7373
with:
7474
go-version-file: 'go.mod'
7575
cache: true
@@ -81,39 +81,51 @@ jobs:
8181
terraform_version: 1.12.2
8282

8383
- name: Setup Gradle
84-
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # version v4.4.2
84+
uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # version v4.4.3
8585
- name: Build user-federation-example with Gradle
8686
run: make user-federation-example
8787

8888
- name: Start Keycloak Container
8989
run: |
9090
MOUNT_FEDERATION_EXAMPLE_VOLUME=""
9191
EXTRA_FEATURES=""
92-
if [[ "${{ matrix.keycloak-version }}" == "26.3.3" || "${{ matrix.keycloak-version }}" == "26.2.5" || "${{ matrix.keycloak-version }}" == "26.1.4" || "${{ matrix.keycloak-version }}" == "26.0.8" || "${{ matrix.keycloak-version }}" == "25.0.6" ]]; then
92+
if [[ "${{ matrix.keycloak-version }}" == "26.3.4" || "${{ matrix.keycloak-version }}" == "26.2.5" || "${{ matrix.keycloak-version }}" == "26.1.4" || "${{ matrix.keycloak-version }}" == "26.0.8" || "${{ matrix.keycloak-version }}" == "25.0.6" ]]; then
9393
MOUNT_FEDERATION_EXAMPLE_VOLUME="-v $PWD/custom-user-federation-example/build/libs/custom-user-federation-example-all.jar:/opt/keycloak/providers/custom-user-federation-example-all.jar:z"
9494
fi
95-
if [[ "${{ matrix.keycloak-version }}" == "26.3.3" || "${{ matrix.keycloak-version }}" == "26.2.5" ]]; then
95+
if [[ "${{ matrix.keycloak-version }}" == "26.3.4" || "${{ matrix.keycloak-version }}" == "26.2.5" ]]; then
9696
EXTRA_FEATURES=",admin-fine-grained-authz:v1"
97+
98+
EXTRA_HTTP_CLIENT_AUTH="-e KC_HTTPS_CLIENT_AUTH=required"
99+
EXTRA_HTTPS_CERT="-e KC_HTTPS_CERTIFICATE_FILE=/opt/keycloak/testdata/tls/server-cert.pem"
100+
EXTRA_HTTPS_KEY="-e KC_HTTPS_CERTIFICATE_KEY_FILE=/opt/keycloak/testdata/tls/server-key.pem"
101+
EXTRA_MTLS_CERTS="-e KC_TRUSTSTORE_PATHS=/opt/keycloak/testdata/tls/ca-cert.pem,/opt/keycloak/testdata/tls/client-cert.pem"
97102
fi
98103
99104
docker run -d --name keycloak \
100105
-p 8080:8080 \
106+
-p 8443:8443 \
101107
-e KC_DB=dev-mem \
102108
-e KC_LOG_LEVEL=INFO,org.keycloak:debug \
103109
-e KEYCLOAK_ADMIN=keycloak \
104110
-e KEYCLOAK_ADMIN_PASSWORD=password \
111+
-e KC_BOOTSTRAP_ADMIN_USERNAME=keycloak \
112+
-e KC_BOOTSTRAP_ADMIN_PASSWORD=password \
113+
${EXTRA_HTTP_CLIENT_AUTH} \
114+
${EXTRA_HTTPS_CERT} \
115+
${EXTRA_HTTPS_KEY} \
116+
${EXTRA_MTLS_CERTS} \
105117
-e KC_FEATURES=preview${EXTRA_FEATURES} \
106118
-e QUARKUS_HTTP_ACCESS_LOG_ENABLED=true \
107119
-e QUARKUS_HTTP_RECORD_REQUEST_START_TIME=true \
108-
-v $PWD/provider/misc:/opt/keycloak/misc:z \
120+
-v $PWD/provider/testdata:/opt/keycloak/testdata:z \
109121
$MOUNT_FEDERATION_EXAMPLE_VOLUME \
110122
quay.io/keycloak/keycloak:${{ matrix.keycloak-version }} --verbose start-dev
111123
112124
- name: Initialize Keycloak
113125
run: ./scripts/wait-for-local-keycloak.sh && ./scripts/create-terraform-client.sh
114126

115127
- name: Get Keycloak Version
116-
uses: actions/github-script@v7
128+
uses: actions/github-script@v8
117129
id: keycloak-version
118130
env:
119131
KEYCLOAK_VERSION: ${{ matrix.keycloak-version }}
@@ -130,9 +142,50 @@ jobs:
130142
KEYCLOAK_CLIENT_SECRET: 884e0f95-0f42-4a63-9b1f-94274655669e
131143
KEYCLOAK_CLIENT_TIMEOUT: 120
132144
KEYCLOAK_REALM: master
145+
# for mtls client auth
133146
KEYCLOAK_URL: "http://localhost:8080"
134147
KEYCLOAK_TEST_PASSWORD_GRANT: "true"
135148
KEYCLOAK_VERSION: ${{ steps.keycloak-version.outputs.result }}
149+
150+
timeout-minutes: 60
151+
# Only run mtls test for the later versions
152+
- name: Test (auth with mtls client certificate)
153+
if: matrix.keycloak-version == '26.3.4' || matrix.keycloak-version == '26.2.5'
154+
run: |
155+
terraform version
156+
go mod download
157+
make testauth
158+
env:
159+
KEYCLOAK_CLIENT_ID: terraform
160+
KEYCLOAK_CLIENT_SECRET: 884e0f95-0f42-4a63-9b1f-94274655669e
161+
KEYCLOAK_CLIENT_TIMEOUT: 120
162+
KEYCLOAK_REALM: master
163+
# for mtls client auth
164+
KEYCLOAK_URL: "https://localhost:8443"
165+
KEYCLOAK_URL_HTTP: "http://localhost:8080"
166+
KEYCLOAK_TLS_CLIENT_CERT: "-----BEGIN CERTIFICATE-----\nMIIFAjCCAuqgAwIBAgIUHeZgtpvLa35tBbH5DT92iPzan64wDQYJKoZIhvcNAQEL\nBQAwbTELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB1Vua25vd24xEDAOBgNVBAcMB1Vu\na25vd24xEDAOBgNVBAoMB1Vua25vd24xEDAOBgNVBAsMB1Vua25vd24xFjAUBgNV\nBAMMDURldiBUZXN0IFJvb3QwHhcNMjUwOTIwMTkwMjU3WhcNMjcxMjI0MTkwMjU3\nWjBzMQswCQYDVQQGEwJVUzEQMA4GA1UECAwHVW5rbm93bjEQMA4GA1UEBwwHVW5r\nbm93bjEQMA4GA1UECgwHVW5rbm93bjEQMA4GA1UECwwHVW5rbm93bjEcMBoGA1UE\nAwwTdHJ1c3RlZC1jbGllbnQtbXRsczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\nAQoCggEBAKfvc1qWAfE39s4RuS81RfdwXT9buwr5RLASNfPW4vZKt/iy/L+nS+SG\nXYQQeMSreZQwunFtQJF5JhxXMC4tlgAyIn2r+59c+5+9C9cbKUypV4NxtUqSjLew\nvTEKs2bu2t2cax97RtUJzPoCeD8qVi+SkyJBU0mNR7tRS2zrh2NdPMg9sBMc2HmV\nOSZ86zLvn6vSmmP9AefXvA78S3Bkj3L+fhRfqWqxYI08j2TdtLpvrvzsnJ2rqYHO\nPjgSE7GE4tbPGtSLNQU4ziEmC8bt3mdqgMUG1lBG6JrBoVMVaqH3Z86ZQr94xz9W\nAmJk646sXRa+vQmx62HOicFrA/v/Z8UCAwEAAaOBkzCBkDAJBgNVHRMEAjAAMA4G\nA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAeBgNVHREEFzAVghN0\ncnVzdGVkLWNsaWVudC1tdGxzMB0GA1UdDgQWBBSFE0oLAkwJBwyMCCoQJXvF6Jvg\nyTAfBgNVHSMEGDAWgBT459iaWRGzTBIdUHLFon1GSQUyoTANBgkqhkiG9w0BAQsF\nAAOCAgEAZKnvqPT3lnDuuG1lJKUiDr/3qkC5TZpDLsrLaglbSwiCPVNHLgE4oq0q\n5ktzNUNx6HTLfn3dAuyd+K63/Tc3hXHDGNHQnRPRhPHGxceCIGUC7Qiqwdi6BNpr\nXJPHqMbEYWq4YHNj9aA6UYr2opp1P3KikACurN4llssx/FgHAXNPs5lD7nCxPuA+\nu2yWE+Y7kzd9PasrgFThX5Blz18H9+O0ri3T5VnYyDZ1kdALx/BzZ6BaQQEkcuh5\nVz+ZXCTNe9mtG8cFdnJUaCL6u9J6D4DfhdW40J+ZX1VJ1223CZquDXjcUUyPZPMo\n5WlTlCYodmcXCk6wtaUZ6kgUvqV61hFrcgs7byHYAtjaweulqy51QNfJT5Qhm8y+\n6b+PkWX+Gb8HKH8ceGjpJ2BA73Rb1keew77zr1/XMVWhwO524DRrXqQ4YFpK4Q3i\n9ZGhuVJCZIXhG4K+S48x/Q9AXPQ87Yk7SGxk7+/keXIpxZZiwB1TMfdpOKPH7wT1\n4wNrhiKrK4t+fSMbMvbPtFRAWGKz+dS1KRZVcGqv5qt05NDesA3pzrR9Rbyl9G4A\n2uxAeH/RjzDI/9UHfYZSOoAvsLrul7ZzIpRWpSSaK0W8Pw2iNUArYTlTpzIUxeLP\nDH309xDpOXvRgKhri6zUQYfnGv5lA2m3LEH3cVqjhACRWMg7dkM=\n-----END CERTIFICATE-----\n"
167+
KEYCLOAK_TLS_CLIENT_KEY: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCn73NalgHxN/bO\nEbkvNUX3cF0/W7sK+USwEjXz1uL2Srf4svy/p0vkhl2EEHjEq3mUMLpxbUCReSYc\nVzAuLZYAMiJ9q/ufXPufvQvXGylMqVeDcbVKkoy3sL0xCrNm7trdnGsfe0bVCcz6\nAng/KlYvkpMiQVNJjUe7UUts64djXTzIPbATHNh5lTkmfOsy75+r0ppj/QHn17wO\n/EtwZI9y/n4UX6lqsWCNPI9k3bS6b6787Jydq6mBzj44EhOxhOLWzxrUizUFOM4h\nJgvG7d5naoDFBtZQRuiawaFTFWqh92fOmUK/eMc/VgJiZOuOrF0Wvr0JsethzonB\nawP7/2fFAgMBAAECggEAA0SaSWWokq8fcxHOjr1J/USx1oJ3I1bdH/1au2yvwfyL\nk/ViYcBkWQVxsG45oL94KuAVNhEwM88tugN1q+W13jnGM2KIulMu5QQ4GhmB4Odd\nYptwhwukXWFnwm/jidnqvGvyJwyua4WN+EIwC4VMDrpFeWHYDb2ywFHBVqnxWoef\n1UhhL2w+vVDC+IVW4dd50Z4i8PU9xFUeTaKfr7tWujXGlujn57wWvr5r25WURha6\nWNBVZaoj/WSUbdD1c6a150q0GEF3Fd1ofQ1/PJRUgL5+lhdjUgBv1S2Z9/6DK4Fq\ngA8Saeh1tl85PrAbNPkz3lqoXg0HpOBd4pRYXrA4CQKBgQDo8gZocAMJzoX+6Fym\naBJWB97hcMl0YkGDl8tUaZlO0bCxh5BOGh4ZoP5e7avEXu8FbdmxNdIO5ENO80Bk\ntl2eG1S7ajdzgEoNREgUplChza6bEGAltnaloY9kzY2c/FRdqZFRPwpBB68V1n/E\nFusMJlQ09fN8SGj0GD98nCadpwKBgQC4jk+s2HnbvLCxOE852YNLS18Rlm030/ZP\ndyOVzQuHPpOghOHLVA5L10Q5bjVQGzN+bTbgB/403wAyop3oZtjOCE2qbimZxmfs\nqeJSx5OEpfqo95Eg/9WDjXMtWN8WtbYsxqOdzO+aqK1KX3aBUA/VgthBAnfWbZF1\nfNQ4euT0swKBgQDVv39xxZaEISWDSeP6LfTlTEOPydaRHLfQ8DB7PIqYcIEZ5bLc\nd8q26at/n8bFYfchnDLtEN23HG1GvJ6Ry2UL9zhA4K4RJd7NXaJmkFXcosddMiGH\neW5VfXH+pT8UldU0PKxDSP03vr1B5JlIbV8wvtr13dmWaTslADsBNKeacQKBgCpz\nucoVhXpRHge13yt8aCIStUyTYI4d+KNw0UOtBcDXWRfsWQ/vRtaVLsFTI3pIt4CW\nWLARxpycyyvakh4aQjaqXEseyfzwUYlzznaiJ8G0eEMTp1OC5bc7+0lsDuznYX9N\nNeefc2IM+MeJy/WU1/+R+HKDwdMWIwZ2b06Knk3XAoGAOCedCxVJMIR6xGw6NDDI\njWI39WpIzq7FNJGBJbjXgE0EazFClQrEsKkt4Qvi9mIkHFwLo+LbriWs5oe1V4dC\nNSgNPEtPR70LwRhp1Xr8ChMM5ZP75zYcu09O1IKrbiWGN6jJwnJxg3q4WmuB8g3o\nOValBgrKUp3ueYbmlRqLfcs=\n-----END PRIVATE KEY-----\n"
168+
KEYCLOAK_TLS_CA_CERT: "-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----\n"
169+
KEYCLOAK_TEST_PASSWORD_GRANT: "true"
170+
KEYCLOAK_VERSION: ${{ steps.keycloak-version.outputs.result }}
171+
172+
timeout-minutes: 60
173+
174+
- name: Test (auth with provided access token)
175+
if: matrix.keycloak-version == '26.3.4' || matrix.keycloak-version == '26.2.5'
176+
run: |
177+
terraform version
178+
go mod download
179+
make access-token
180+
export KEYCLOAK_ACCESS_TOKEN="$(cat ./keycloak_access_token)"
181+
make testauth
182+
env:
183+
KEYCLOAK_CLIENT_ID: terraform
184+
KEYCLOAK_CLIENT_TIMEOUT: 120
185+
KEYCLOAK_REALM: master
186+
KEYCLOAK_URL: "http://localhost:8080"
187+
KEYCLOAK_VERSION: ${{ steps.keycloak-version.outputs.result }}
188+
136189
timeout-minutes: 60
137190

138191
- name: Print container logs

.gitignore

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ scratch/
2626
.gradle/
2727

2828
# custom user federation example
29+
custom-user-federation-example/bin
2930
custom-user-federation-example/build
3031
!custom-user-federation-example/build/libs
3132

@@ -35,6 +36,19 @@ site/
3536
# releases
3637
*.zip
3738

39+
# Keycloak access token
40+
keycloak_access_token
41+
3842
.DS_Store
3943

40-
test_env.json
44+
# Custom test_env overrides
45+
test_env*.json
46+
47+
# Custom provider_installation mappings
48+
dev.tfrc
49+
50+
# KCADM config folder
51+
.keycloak/
52+
53+
# Locally started Keycloak data
54+
kcdata/

README.md

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ This provider will officially support the latest three major versions of Keycloa
4848

4949
The following versions are used when running acceptance tests in CI:
5050

51-
- 26.3.3 (latest)
51+
- 26.3.4 (latest)
5252
- 26.2.5
5353
- 26.1.4
5454
- 26.0.8
@@ -106,6 +106,8 @@ You can spin up a local developer environment via [Docker Compose](https://docs.
106106
This will spin up a few containers for Keycloak, PostgreSQL, and OpenLDAP, which can be used for testing the provider.
107107
This environment and its setup via `make local` is not intended for production use.
108108

109+
You can also use `make local-mtls` to start Keycloak with required client authentication via mTLS certificate.
110+
109111
To stop the environment you can use the `make local-stop`. To remove the local environment use `make local-down`.
110112

111113
Note: The setup scripts require the [jq](https://stedolan.github.io/jq/) command line utility.
@@ -128,6 +130,56 @@ KEYCLOAK_URL="http://localhost:8080" \
128130
make testacc
129131
```
130132

133+
#### Test with HTTPS
134+
You can also run the same tests on Keycloak's https port.
135+
For this start the env with `make local`. After that run the following command:
136+
137+
```
138+
KEYCLOAK_CLIENT_ID=terraform \
139+
KEYCLOAK_CLIENT_SECRET=884e0f95-0f42-4a63-9b1f-94274655669e \
140+
KEYCLOAK_CLIENT_TIMEOUT=5 \
141+
KEYCLOAK_REALM=master \
142+
KEYCLOAK_TEST_PASSWORD_GRANT=true \
143+
KEYCLOAK_URL="https://localhost:8443" \
144+
KEYCLOAK_TLS_CA_CERT="$(cat provider/testdata/tls/server-cert.pem)" \
145+
make testacc
146+
```
147+
148+
#### Test Authenticating with HTTPS + mTLS
149+
You can also run the same tests on Keycloak's https port with the Keycloak Terraform provider authenticating to the server with a mTLS client certificate.
150+
For this start the env with `make local-mtls`. After that run the following command:
151+
152+
```
153+
KEYCLOAK_CLIENT_ID=terraform \
154+
KEYCLOAK_CLIENT_SECRET=884e0f95-0f42-4a63-9b1f-94274655669e \
155+
KEYCLOAK_CLIENT_TIMEOUT=5 \
156+
KEYCLOAK_REALM=master \
157+
KEYCLOAK_TEST_PASSWORD_GRANT=true \
158+
KEYCLOAK_URL_HTTP="http://localhost:8080" \
159+
KEYCLOAK_URL="https://localhost:8443" \
160+
KEYCLOAK_TLS_CLIENT_CERT="$(cat provider/testdata/tls/client-cert.pem)" \
161+
KEYCLOAK_TLS_CLIENT_KEY="$(cat provider/testdata/tls/client-key.pem)" \
162+
KEYCLOAK_TLS_CA_CERT="$(cat provider/testdata/tls/server-cert.pem)" \
163+
make testauth
164+
```
165+
166+
#### Test Authenticating with provided Access Token
167+
You can also run the same test with a provided access token.
168+
For this start the env with `make local`. To obtain an access token for the admin user via the admin-cli client, run `make access-token` to
169+
store an acess token in the `./keycloak_access_token` file.
170+
171+
After that run the following command:
172+
173+
```
174+
make access-token
175+
KEYCLOAK_CLIENT_ID=terraform \
176+
KEYCLOAK_CLIENT_TIMEOUT=5 \
177+
KEYCLOAK_ACCESS_TOKEN="$(cat keycloak_access_token)" \
178+
KEYCLOAK_REALM=master \
179+
KEYCLOAK_URL="http://localhost:8080" \
180+
make testauth
181+
```
182+
131183
### Run examples
132184

133185
You can run examples against a Keycloak instance.

custom-user-federation-example/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
plugins {
2-
id 'org.jetbrains.kotlin.jvm' version '2.2.10'
2+
id 'org.jetbrains.kotlin.jvm' version '2.2.20'
33
id 'com.gradleup.shadow' version '9.1.0'
44
id 'java-library'
55
}
66

77
ext {
8-
keycloakVersion = '26.3.3'
8+
keycloakVersion = '26.3.4'
99
}
1010

1111
dependencies {

docker-compose-mtls.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
services:
2+
keycloak:
3+
environment:
4+
- KC_HTTPS_CLIENT_AUTH=required
5+
- KC_TRUSTSTORE_PATHS=/opt/keycloak/testdata/tls/ca-cert.pem,/opt/keycloak/testdata/tls/client-cert.pem

docker-compose.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ services:
1414
environment:
1515
LDAP_PORT_NUMBER: 389
1616
keycloak:
17-
image: quay.io/keycloak/keycloak:26.3.3
17+
image: quay.io/keycloak/keycloak:26.3.4
1818
command: --verbose start-dev
1919
depends_on:
2020
- postgres
@@ -33,14 +33,18 @@ services:
3333
- KC_FEATURES=preview,admin-fine-grained-authz:v1
3434
- QUARKUS_HTTP_ACCESS_LOG_ENABLED=true
3535
- QUARKUS_HTTP_RECORD_REQUEST_START_TIME=true
36+
- KC_HTTPS_CERTIFICATE_FILE=/opt/keycloak/testdata/tls/server-cert.pem
37+
- KC_HTTPS_CERTIFICATE_KEY_FILE=/opt/keycloak/testdata/tls/server-key.pem
3638
# Enable for remote java debugging
3739
# - DEBUG=true
3840
# - DEBUG_PORT=*:8787
41+
# - DEBUG_SUSPEND=y
3942
ports:
4043
- "8080:8080"
44+
- "8443:8443"
4145
# Enable for remote java debugging
4246
# - "8787:8787"
4347
volumes:
4448
# Make the custom-user-federation-example extension available to Keycloak. The :z option is required and tells Docker that the volume content will be shared between containers.
4549
- ./custom-user-federation-example/build/libs/custom-user-federation-example-all.jar:/opt/keycloak/providers/custom-user-federation-example-all.jar:z
46-
- ./provider/misc:/opt/keycloak/misc:z
50+
- ./provider/testdata:/opt/keycloak/testdata:z

0 commit comments

Comments
 (0)