Keycloak с использованием другого Keycloak в качестве IDP с активированным PKCE - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть приложение Java, защищенное с помощью Keycloak (с использованием адаптера Keycloak Spring Security).
Клиент в Keycloak является клиентом openid c openid-connect.
У меня есть другой Keycloak (не в моем организации), которые выступают в качестве Поставщика идентификационных данных и используют PKCE. Я должен связать свой локальный Keycloak с IDP.

Когда PKCE не включен в Keycloak IDP, все работает нормально, я без проблем подключаюсь к своему приложению через IDP.

Когда PKCE включен в Keycloak IDP (client > Advanced Settings > Proof Key for Code Exchange Code Challenge Method установлен на S256) он больше не работает.
Мой локальный Keycloak имеет это в своих журналах:

ERROR [org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider] (default task-58) invalid_request for broker login oidc

И IDP Keycloak имеет это в своих журналах:

INFO  [org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint] (default task-28) PKCE enforced Client without code challenge method.
WARN  [org.keycloak.events] (default task-28) type=LOGIN_ERROR, realmId=realm, clientId=client, userId=null, ipAddress=1.2.3.4, error=invalid_request, response_type=code, redirect_uri=https://keycloak/auth/realms/realm/broker/healthcare/endpoint, response_mode=query

Итак, как я понимаю, два Keycloak больше не могут взаимодействовать, потому что один поддерживает PKCE, а другой нет.

Затем я включаю PKCE на своем локальном Keycloak (client > Advanced Settings > Proof Key for Code Exchange Code Challenge Method установлен на S256), но он ломается раньше.
Локальный Keycloak вообще не хочет говорить с моим приложением, перенаправление на Keycloak приводит к ошибкам.
Мой локальный Keycloak имеет это в своих журналах:

INFO  [org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint] (default task-68) PKCE enforced Client without code challenge method.
WARN  [org.keycloak.events] (default task-68) type=LOGIN_ERROR, realmId=realm, clientId=client, userId=null, ipAddress=1.2.3.4, error=invalid_request, response_type=code, redirect_uri=https://kecyloak_local/app, response_mode=query

А в журнале IDP Keycloak ничего нет. Итак, насколько я понимаю, мой локальный Keycloak wi sh взаимодействует с моим приложением с помощью PKCE, но мое приложение не «говорит» на PKCE, поэтому Keycloak останавливает процесс.

Поэтому мой вопрос заключается в следующем : поскольку я не хочу изменять свое приложение для PKCE-совместимости, можно ли сказать моему локальному Keycloak говорить на PKCE только с IDC Keycloak и не использовать PKCE с моим приложением?

Спасибо очень много!

себ

...