Skip to content

Commit 1434335

Browse files
authored
chore(ci): remove 3rd keycloak docker image (#9341)
1 parent 347664e commit 1434335

10 files changed

+206
-75
lines changed

ci/init-plugin-test-service.sh

+9-2
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,15 @@ after() {
4242

4343
# wait for keycloak ready
4444
bash -c 'while true; do curl -s localhost:8080 &>/dev/null; ret=$?; [[ $ret -eq 0 ]] && break; sleep 3; done'
45-
docker cp ci/kcadm_configure_cas.sh apisix_keycloak_new:/tmp/
46-
docker exec apisix_keycloak_new bash /tmp/kcadm_configure_cas.sh
45+
46+
# install jq
47+
wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 -O jq
48+
chmod +x jq
49+
docker cp jq apisix_keycloak:/usr/bin/
50+
51+
# configure keycloak
52+
docker exec apisix_keycloak bash /tmp/kcadm_configure_cas.sh
53+
docker exec apisix_keycloak bash /tmp/kcadm_configure_university.sh
4754
}
4855

4956
before() {

ci/pod/docker-compose.plugin.yml

+8-24
Original file line numberDiff line numberDiff line change
@@ -37,42 +37,26 @@ services:
3737
networks:
3838
apisix_net:
3939

40-
4140
## keycloak
4241
apisix_keycloak:
43-
image: sshniro/keycloak-apisix:1.0.0
44-
environment:
45-
KEYCLOAK_USER: admin
46-
KEYCLOAK_PASSWORD: 123456
47-
restart: unless-stopped
48-
ports:
49-
- "8090:8080"
50-
- "8443:8443"
51-
networks:
52-
apisix_net:
53-
54-
## keycloak
55-
# The keycloak official has two types of docker images:
56-
# * legacy WildFly distribution
57-
# * new Quarkus based distribution
58-
# Here we choose new version, because it's mainstream and
59-
# supports kcadm.sh to init the container for test.
60-
# The original keycloak service `apisix_keycloak` is
61-
# third-party personal customized image and for OIDC test only.
62-
# We should unify both containers in future.
63-
apisix_keycloak_new:
64-
container_name: apisix_keycloak_new
42+
container_name: apisix_keycloak
6543
image: quay.io/keycloak/keycloak:18.0.2
6644
# use host network because in CAS auth,
6745
# keycloak needs to send back-channel POST to apisix.
6846
network_mode: host
6947
environment:
7048
KEYCLOAK_ADMIN: admin
7149
KEYCLOAK_ADMIN_PASSWORD: admin
50+
KC_HTTPS_CERTIFICATE_FILE: /opt/keycloak/conf/server.crt.pem
51+
KC_HTTPS_CERTIFICATE_KEY_FILE: /opt/keycloak/conf/server.key.pem
7252
restart: unless-stopped
73-
command: ["start-dev", "--http-port 8080"]
53+
command: ["start-dev"]
7454
volumes:
7555
- /opt/keycloak-protocol-cas-18.0.2.jar:/opt/keycloak/providers/keycloak-protocol-cas-18.0.2.jar
56+
- ./ci/pod/keycloak/server.crt.pem:/opt/keycloak/conf/server.crt.pem
57+
- ./ci/pod/keycloak/server.key.pem:/opt/keycloak/conf/server.key.pem
58+
- ./ci/pod/keycloak/kcadm_configure_cas.sh:/tmp/kcadm_configure_cas.sh
59+
- ./ci/pod/keycloak/kcadm_configure_university.sh:/tmp/kcadm_configure_university.sh
7660

7761
## kafka-cluster
7862
zookeeper-server1:
File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env bash
2+
3+
#
4+
# Licensed to the Apache Software Foundation (ASF) under one or more
5+
# contributor license agreements. See the NOTICE file distributed with
6+
# this work for additional information regarding copyright ownership.
7+
# The ASF licenses this file to You under the Apache License, Version 2.0
8+
# (the "License"); you may not use this file except in compliance with
9+
# the License. You may obtain a copy of the License at
10+
#
11+
# http://www.apache.org/licenses/LICENSE-2.0
12+
#
13+
# Unless required by applicable law or agreed to in writing, software
14+
# distributed under the License is distributed on an "AS IS" BASIS,
15+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
# See the License for the specific language governing permissions and
17+
# limitations under the License.
18+
#
19+
20+
export PATH=/opt/keycloak/bin:$PATH
21+
22+
kcadm.sh config credentials --server http://localhost:8080 --realm master --user admin --password admin
23+
24+
# create realm University
25+
kcadm.sh create realms -s realm=University -s enabled=true
26+
27+
# create roles `Teacher, Student`
28+
kcadm.sh create roles -r University -s name=Teacher
29+
kcadm.sh create roles -r University -s name=Student
30+
31+
32+
kcadm.sh create users -r University -s [email protected] -s enabled=true
33+
kcadm.sh create users -r University -s [email protected] -s enabled=true
34+
35+
# set password
36+
kcadm.sh set-password -r University --username [email protected] --new-password 123456
37+
kcadm.sh set-password -r University --username [email protected] --new-password 123456
38+
39+
# bind roles to users
40+
kcadm.sh add-roles -r University --uusername [email protected] --rolename Teacher
41+
kcadm.sh add-roles -r University --uusername [email protected] --rolename Student
42+
43+
# create client course_management
44+
kcadm.sh create clients -r University -s clientId=course_management -s enabled=true -s clientAuthenticatorType=client-secret -s secret=d1ec69e9-55d2-4109-a3ea-befa071579d5
45+
46+
client_id=$(kcadm.sh get clients -r University --fields id,clientId 2>/dev/null | jq -r '.[] | select(.clientId=='\"course_management\"') | .id')
47+
teacher_id=$(kcadm.sh get roles -r University --fields id,name 2>/dev/null | jq -r '.[] | select(.name=='\"Teacher\"') | .id')
48+
student_id=$(kcadm.sh get roles -r University --fields id,name 2>/dev/null | jq -r '.[] | select(.name=='\"Student\"') | .id')
49+
50+
# update client course_management
51+
kcadm.sh update clients/${client_id} -r University -s protocol=openid-connect -s standardFlowEnabled=true \
52+
-s implicitFlowEnabled=true -s directAccessGrantsEnabled=true -s serviceAccountsEnabled=true \
53+
-s authorizationServicesEnabled=true -s 'redirectUris=["*"]' -s 'webOrigins=["*"]'
54+
55+
kcadm.sh update clients/${client_id}/authz/resource-server -r University -s allowRemoteResourceManagement=false -s policyEnforcementMode="ENFORCING"
56+
57+
# create authz-resource with name `course_resource`, uri `/course/*`, scope `DELETE, delete, view, GET`
58+
kcadm.sh create clients/${client_id}/authz/resource-server/resource -r University -s name=course_resource \
59+
-s ownerManagedAccess=false -s uris='["/course/*"]' -s scopes='[{"name": "DELETE"},{"name": "view"},{"name": "GET"},{"name": "delete"}]'
60+
61+
course_resource_id=$(kcadm.sh get clients/${client_id}/authz/resource-server/resource -r University --fields _id,name 2>/dev/null | jq -r '.[] | select(.name=='\"course_resource\"') | ._id')
62+
DELETE_scope_id=$(kcadm.sh get clients/${client_id}/authz/resource-server/scope -r University --fields id,name 2>/dev/null | jq -r '.[] | select(.name=='\"DELETE\"') | .id')
63+
delete_scope_id=$(kcadm.sh get clients/${client_id}/authz/resource-server/scope -r University --fields id,name 2>/dev/null | jq -r '.[] | select(.name=='\"delete\"') | .id')
64+
GET_scope_id=$(kcadm.sh get clients/${client_id}/authz/resource-server/scope -r University --fields id,name 2>/dev/null | jq -r '.[] | select(.name=='\"GET\"') | .id')
65+
view_scope_id=$(kcadm.sh get clients/${client_id}/authz/resource-server/scope -r University --fields id,name 2>/dev/null | jq -r '.[] | select(.name=='\"view\"') | .id')
66+
67+
# create authz-policy `AllowTeacherPolicy, AllowStudentPolicy`
68+
kcadm.sh create clients/${client_id}/authz/resource-server/policy/role -r University \
69+
-s name="AllowTeacherPolicy" -s logic="POSITIVE" -s decisionStrategy="UNANIMOUS" \
70+
-s roles='[{"id": '\"${teacher_id}\"'}]'
71+
72+
kcadm.sh create clients/${client_id}/authz/resource-server/policy/role -r University \
73+
-s name="AllowStudentPolicy" -s logic="POSITIVE" -s decisionStrategy="UNANIMOUS" \
74+
-s roles='[{"id": '\"${student_id}\"'}]'
75+
76+
allow_teacher_policy_id=$(kcadm.sh get clients/${client_id}/authz/resource-server/policy -r University --fields id,name 2>/dev/null | jq -r '.[] | select(.name=='\"AllowTeacherPolicy\"') | .id')
77+
allow_student_policy_id=$(kcadm.sh get clients/${client_id}/authz/resource-server/policy -r University --fields id,name 2>/dev/null | jq -r '.[] | select(.name=='\"AllowStudentPolicy\"') | .id')
78+
79+
# create authz-permission `Delete Course Permission` and `View Course Permission`
80+
kcadm.sh create clients/${client_id}/authz/resource-server/permission/scope -r University \
81+
-s name="Delete Course Permission" -s logic="POSITIVE" -s decisionStrategy="UNANIMOUS" \
82+
-s policies='['\"${allow_teacher_policy_id}\"']' \
83+
-s scopes='['\"${DELETE_scope_id}\"', '\"${delete_scope_id}\"']' \
84+
-s resources='['\"${course_resource_id}\"']'
85+
86+
kcadm.sh create clients/${client_id}/authz/resource-server/permission/scope -r University \
87+
-s name="View Course Permission" -s logic="POSITIVE" -s decisionStrategy="AFFIRMATIVE" \
88+
-s policies='['\"${allow_teacher_policy_id}\"', '\"${allow_student_policy_id}\"']' \
89+
-s scopes='['\"${GET_scope_id}\"', '\"${view_scope_id}\"']' \
90+
-s resources='['\"${course_resource_id}\"']'

ci/pod/keycloak/server.crt.pem

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDazCCAlOgAwIBAgIUbZfnhty/ZiHPz5Aq8kK5Kr8kcSQwDQYJKoZIhvcNAQEL
3+
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
4+
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMzA0MTgxMTQzNDJaFw0zMzA0
5+
MTUxMTQzNDJaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
6+
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
7+
AQUAA4IBDwAwggEKAoIBAQC/F4wK7eMTVAKGDMLCXE+Y6REdA5GU6/AakJf3NEKQ
8+
wCrtrqO+VBPIz445+edf3EEXhjFFGPdU6p0EkF0SMLaMsVBQQJ2qcP6FloIYiyT3
9+
WCs/gbtdoWq53ucAfWueIyHWsovLc0VhOXm0rhTYg88nMjJ7y6vYkfLMT6qlwASn
10+
9Tozgjat09fWATbN7yBi4ivVVsKDo2S3jkOyVnYYMjzZO3CSkyUSMl+ZsSesseSK
11+
A9c2zogfKIU833njraA8blMFfdinEMI/9yceEx57IUjnpY1iWHLSItiZF+LKEpeL
12+
vp9gpr88ghR85ISusqAqwcmnsdAqjjw7gbPm1DIvUgVBAgMBAAGjUzBRMB0GA1Ud
13+
DgQWBBRvlz5ZiE2fD9ikPRqpYwsVrxZfxTAfBgNVHSMEGDAWgBRvlz5ZiE2fD9ik
14+
PRqpYwsVrxZfxTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCX
15+
5fOeFnX67eHI5dJB8p3U2GS21qykDVLV5ZV+JZfZwXJEygIvr/T9vs772EPxv+0/
16+
TO0+pGdcVswXq/6BoUFCV0rWWTDP5wTS3sV1ZsSSHil5zEutXuAI1LQGlit6w5xn
17+
iDURFZw3ZmOFytXKXNbca1ma4yaCZtOwVe3O36GZeOiZFzBYE2DELqy77Nz1E5+3
18+
jZaDnx0vonV8/hhX6FAPRPQnIXkaEH3BnVQZGD1jxipbFQQtmeeNPELy18MQo30N
19+
W1wOsbMMouniKUjdT16tdtzJzC+l9pVqRC+8df5PJfN56Uv9Ed6pjytkSF1SvHyJ
20+
iTWmyxJL9AonUkc5Oiri
21+
-----END CERTIFICATE-----

ci/pod/keycloak/server.key.pem

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC/F4wK7eMTVAKG
3+
DMLCXE+Y6REdA5GU6/AakJf3NEKQwCrtrqO+VBPIz445+edf3EEXhjFFGPdU6p0E
4+
kF0SMLaMsVBQQJ2qcP6FloIYiyT3WCs/gbtdoWq53ucAfWueIyHWsovLc0VhOXm0
5+
rhTYg88nMjJ7y6vYkfLMT6qlwASn9Tozgjat09fWATbN7yBi4ivVVsKDo2S3jkOy
6+
VnYYMjzZO3CSkyUSMl+ZsSesseSKA9c2zogfKIU833njraA8blMFfdinEMI/9yce
7+
Ex57IUjnpY1iWHLSItiZF+LKEpeLvp9gpr88ghR85ISusqAqwcmnsdAqjjw7gbPm
8+
1DIvUgVBAgMBAAECggEBAKUrrkGYI2mGePPzPbiP38E02zTv67sEQLJFfwUOp+bE
9+
I5b0F9agh8VQGghkyKgkEiNKO3YVQVuluvjB66CYeIGdleT4JQ+4wVcoo+ShCN++
10+
1wr6kMA6kKx+Tb8vqYCzr0ELbSf6x+Jksp0Ixz3qmHixu88jWbNFW89boQ3JrnyZ
11+
TUgRSRdPoXcxspwcbhy6mMhwUfUSy8Zcck81dBEAjokvzbYh4jtFYMipWqro66KJ
12+
B9uqQme2J/rN/2PSrA6chI85Wa+JaGOSPDaGNp+DrADjoVZf1tXgzGCsA/lmVtQ0
13+
8YN4Dh21EjLxz4Dj5GE7RWET4Ejvv1XEih1p+zKne00CgYEA327raCD5Fnr1nGTb
14+
Q4ZWkcDR6EGSD6JGD0ur+UqqJhirM/5b4iGcsVK5uufb5dwk9+9z0EucXOVq/il0
15+
vgG2FbgRYM8kx3CDLvMYAqKJ8e5NsGJWwJVq6DsmsO1SaEId+SVFH83RHfG5/ksq
16+
/DgRg0Wl9FoL7sHchuSIP2QiLrMCgYEA2vHcKsMZk/KGMBHVffY3PUckirIM6vLa
17+
idMmm0T0HSAdviZRxQGyOnjd93ZhMqFJPTrmHOq0uAxfdFt+oRoHk/pGarBCv76L
18+
NnPrSnVe1pJOh7Mm7LHLgrAgeM2WW7xz6jZwc8On+9qHK97I/wAnJB8J7DvQJ2hR
19+
sWCDSbfKtjsCgYEAnVE77tVIjMuGo9dfiuvLiFR7d0yzys43Bg4ByEUKCEjWQoWV
20+
rGJ+MVxN6YvXCME4RloS8VZLgh0GeG44BJCv5Br2IXO4MbTGqQgAn9pRxkZD7S1Q
21+
Z8jMvTboxypSG5ZyBDp5sSr5Ulwg2SuT2IKh0gv4DVRZkoJtA41lYTzf1IECgYBd
22+
3NJGgt20T4S3lu2v0p5b5uQDkdF36CVIcP1cE3OUCPC3VDY5/0ApUSfXryh8TCjZ
23+
1yZPv086mBNUDuV6q24UQndtxaLYERgdgBSfFzJRSuffxS4qyw40OM2y/HA5Y9FN
24+
14jeGEMr9cN9S0VgDPC6y5O1cu8J9e8P3BBsyh5dgQKBgHMlIhOJDO/neVnax79X
25+
d3+5GaiggUnkd27OkYC4LhXEc/QWeHE0ByA0bDhhnsE7IVK2CVC18axOLmEJVy2g
26+
F6ZtxcpNrlVtF4YaOiRVUcDNnz9gX48efrpdoX2iBSFEd1NRDo/bjkVXI1L08LNf
27+
BbMB104PadChoGpl5R3NQQsP
28+
-----END PRIVATE KEY-----

t/plugin/authz-keycloak.t

+17-17
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ __DATA__
3131
local plugin = require("apisix.plugins.authz-keycloak")
3232
local ok, err = plugin.check_schema({
3333
client_id = "foo",
34-
token_endpoint = "https://host.domain/auth/realms/foo/protocol/openid-connect/token"
34+
token_endpoint = "https://host.domain/realms/foo/protocol/openid-connect/token"
3535
})
3636
if not ok then
3737
ngx.say(err)
@@ -54,7 +54,7 @@ done
5454
local plugin = require("apisix.plugins.authz-keycloak")
5555
local ok, err = plugin.check_schema({
5656
client_id = "foo",
57-
discovery = "https://host.domain/auth/realms/foo/.well-known/uma2-configuration"
57+
discovery = "https://host.domain/realms/foo/.well-known/uma2-configuration"
5858
})
5959
if not ok then
6060
ngx.say(err)
@@ -78,8 +78,8 @@ done
7878
local ok, err = plugin.check_schema({
7979
client_id = "foo",
8080
lazy_load_paths = true,
81-
token_endpoint = "https://host.domain/auth/realms/foo/protocol/openid-connect/token",
82-
resource_registration_endpoint = "https://host.domain/auth/realms/foo/authz/protection/resource_set"
81+
token_endpoint = "https://host.domain/realms/foo/protocol/openid-connect/token",
82+
resource_registration_endpoint = "https://host.domain/realms/foo/authz/protection/resource_set"
8383
})
8484
if not ok then
8585
ngx.say(err)
@@ -103,7 +103,7 @@ done
103103
local ok, err = plugin.check_schema({
104104
client_id = "foo",
105105
lazy_load_paths = true,
106-
discovery = "https://host.domain/auth/realms/foo/.well-known/uma2-configuration"
106+
discovery = "https://host.domain/realms/foo/.well-known/uma2-configuration"
107107
})
108108
if not ok then
109109
ngx.say(err)
@@ -125,9 +125,9 @@ done
125125
content_by_lua_block {
126126
local plugin = require("apisix.plugins.authz-keycloak")
127127
local ok, err = plugin.check_schema({
128-
discovery = "https://host.domain/auth/realms/foo/.well-known/uma2-configuration",
129-
token_endpoint = "https://host.domain/auth/realms/foo/protocol/openid-connect/token",
130-
resource_registration_endpoint = "https://host.domain/auth/realms/foo/authz/protection/resource_set",
128+
discovery = "https://host.domain/realms/foo/.well-known/uma2-configuration",
129+
token_endpoint = "https://host.domain/realms/foo/protocol/openid-connect/token",
130+
resource_registration_endpoint = "https://host.domain/realms/foo/authz/protection/resource_set",
131131
client_id = "University",
132132
client_secret = "secret",
133133
grant_type = "urn:ietf:params:oauth:grant-type:uma-ticket",
@@ -187,7 +187,7 @@ done
187187
location /t {
188188
content_by_lua_block {
189189
local plugin = require("apisix.plugins.authz-keycloak")
190-
local ok, err = plugin.check_schema({discovery = "https://host.domain/auth/realms/foo/.well-known/uma2-configuration"})
190+
local ok, err = plugin.check_schema({discovery = "https://host.domain/realms/foo/.well-known/uma2-configuration"})
191191
if not ok then
192192
ngx.say(err)
193193
end
@@ -210,7 +210,7 @@ done
210210
local plugin = require("apisix.plugins.authz-keycloak")
211211
local ok, err = plugin.check_schema({
212212
client_id = "foo",
213-
token_endpoint = "https://host.domain/auth/realms/foo/protocol/openid-connect/token",
213+
token_endpoint = "https://host.domain/realms/foo/protocol/openid-connect/token",
214214
lazy_load_paths = true
215215
})
216216
if not ok then
@@ -238,7 +238,7 @@ done
238238
[[{
239239
"plugins": {
240240
"authz-keycloak": {
241-
"token_endpoint": "https://127.0.0.1:8443/auth/realms/University/protocol/openid-connect/token",
241+
"token_endpoint": "https://127.0.0.1:8443/realms/University/protocol/openid-connect/token",
242242
"permissions": ["course_resource#delete"],
243243
"client_id": "course_management",
244244
"grant_type": "urn:ietf:params:oauth:grant-type:uma-ticket",
@@ -296,7 +296,7 @@ GET /t
296296
--- response_body
297297
false
298298
--- error_log
299-
Error while sending authz request to https://127.0.0.1:8443/auth/realms/University/protocol/openid-connect/token: 18
299+
Error while sending authz request to https://127.0.0.1:8443/realms/University/protocol/openid-connect/token: 18
300300
--- error_code: 503
301301

302302

@@ -311,7 +311,7 @@ Error while sending authz request to https://127.0.0.1:8443/auth/realms/Universi
311311
[[{
312312
"plugins": {
313313
"authz-keycloak": {
314-
"token_endpoint": "https://127.0.0.1:8443/auth/realms/University/protocol/openid-connect/token",
314+
"token_endpoint": "https://127.0.0.1:8443/realms/University/protocol/openid-connect/token",
315315
"permissions": ["course_resource#delete"],
316316
"client_id": "course_management",
317317
"grant_type": "urn:ietf:params:oauth:grant-type:uma-ticket",
@@ -382,7 +382,7 @@ Request denied: HTTP 401 Unauthorized. Body: {"error":"HTTP 401 Unauthorized"}
382382
[[{
383383
"plugins": {
384384
"authz-keycloak": {
385-
"token_endpoint": "http://127.0.0.1:8443/auth/realms/University/protocol/openid-connect/token",
385+
"token_endpoint": "http://127.0.0.1:8443/realms/University/protocol/openid-connect/token",
386386
"client_id": "course_management",
387387
"grant_type": "urn:ietf:params:oauth:grant-type:uma-ticket",
388388
"policy_enforcement_mode": "ENFORCING",
@@ -447,7 +447,7 @@ GET /t
447447
[[{
448448
"plugins": {
449449
"authz-keycloak": {
450-
"token_endpoint": "http://127.0.0.1:8443/auth/realms/University/protocol/openid-connect/token",
450+
"token_endpoint": "http://127.0.0.1:8443/realms/University/protocol/openid-connect/token",
451451
"client_id": "course_management",
452452
"grant_type": "urn:ietf:params:oauth:grant-type:uma-ticket",
453453
"policy_enforcement_mode": "ENFORCING",
@@ -515,7 +515,7 @@ Location: http://127.0.0.1/test
515515
[[{
516516
"plugins": {
517517
"authz-keycloak": {
518-
"token_endpoint": "https://127.0.0.1:8443/auth/realms/University/protocol/openid-connect/token",
518+
"token_endpoint": "https://127.0.0.1:8443/realms/University/protocol/openid-connect/token",
519519
"permissions": ["course_resource#view"],
520520
"client_id": "course_management",
521521
"client_secret": "d1ec69e9-55d2-4109-a3ea-befa071579d5",
@@ -587,7 +587,7 @@ true
587587
[[{
588588
"plugins": {
589589
"authz-keycloak": {
590-
"token_endpoint": "https://127.0.0.1:8443/auth/realms/University/protocol/openid-connect/token",
590+
"token_endpoint": "https://127.0.0.1:8443/realms/University/protocol/openid-connect/token",
591591
"permissions": ["course_resource#view"],
592592
"client_id": "course_management",
593593
"client_secret": "d1ec69e9-55d2-4109-a3ea-befa071579d5",

0 commit comments

Comments
 (0)