Попытка подключить приложение Spring-Boot к Keycloak с помощью SSL
Я работаю над сценарием Katacoda, в котором я подключаю приложение с весенней загрузкой к KeyCloak. Я хотел сделать его минимальным, поэтому вот мои конфигурации:
pom.xml
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>10.0.1</version>
</dependency>
</dependencies>
Свойства приложения
#Keycloak Properties
#Katcoda Url
keycloak.auth-server-url=https://2886795315-8444-ollie02.environments.katacoda.com/auth
keycloak.realm=todoRealm
#Client
keycloak.resource=openid-login-client
keycloak.public-client=true
Моя проблема в том, что когда я попадаю в конечную точку своего приложения, она правильно перенаправляется на страницу входа. Но проблема в том, чтоredirect_uri
он проходит не по SSL, поэтому http://2886795315-8080-ollie02.environments.katacoda.com/v1/todos
что вызывает проблему с COR.
Я добавил это свойство, чтобы попытаться принудительно использовать https:
keycloak.ssl-required=all
Но тогда это меняет redirect_uri
param он передается в логин keycloak, чтобы https://2886795315-8080-ollie02.environments.katacoda.com:0/v1/todos
Кто-нибудь знает, почему путь URL-адреса :0
добавлен на передний план?
1 ответ
Это может быть дубликат этого ответа.
Это часть настроек безопасности Keycloak по умолчанию, которые продвигают использование нестандартного порта для SSL-соединения. Это можно установить в среде Keycloak с помощьюKEYCLOAK_HTTPS_PORT=4443
например.
Затем для приложения (клиента) может потребоваться это (например, когда ssl-required=all
установлен), приложению необходимо знать этот порт (т.е. независимо от KEYCLOAK_HTTPS_PORT
установлен как). Чтобы явно установить этот порт в приложении, чтобы он не по умолчанию:0
использовать keycloak.confidential-port=4443
свойство.
Поскольку вы используете nginx, это, конечно, может быть обработано директивой proxy pass, и в этом случае просто установить keycloak.confidential-port
свойство к стандарту 443 для SSL.
Чтобы не усложнять ситуацию, вы, конечно, можете использовать отдельную директиву proxy-pass для нестандартного порта в NginX, который будет обрабатывать клиентские SSL-соединения с серверной частью Keycloak.
(напомните мне найти ссылки на документацию для этого ответа)... У меня сейчас нет времени.