У меня есть Java веб-приложение, которое использует OIDCKeycloakFilter и пользовательский ConfigResolver, чтобы разрешить различные возможные параметры безопасности (независимо от того, что заказчик установки хочет использовать). Мне нужно использовать Keycloak 4.8.3 (RedHat SSO 7.3). Мне удалось настроить веб-приложение для аутентификации как publi c -клиента или как конфиденциального клиента с общим секретным ключом. Это работает, как и ожидалось.
Теперь я пытаюсь настроить аутентификацию X.509 между моим приложением и Keycloak. Вы можете настроить клиент Keycloak как конфиденциальный клиент, и на вкладке «Учетные данные» вы можете установить сертификат X.509.
Я не уверен на 100%, что это значит. Согласно другим опциям с Signed JWT и общим секретом, для меня это будет означать, что клиент (веб-приложение) идентифицирует себя, используя сертификат X.509. Таким образом, адаптер должен иметь клиентское хранилище ключей и т. Д. c.
Когда я смотрю вывод JSON на вкладке установки для клиента в Keycloak, он показывает следующее:
{
"realm": "Test_Realm",
"auth-server-url": "https://keycloak.test/auth",
"ssl-required": "external",
"resource": "myclient",
"credentials": {},
"confidential-port": 0
}
В соответствии с этим я настроил преобразователь конфигурации в веб-приложении следующим образом:
config.setRealm(configVO.getRealm());
config.setAuthServerUrl(configVO.getAuthServerUrl());
config.setSslRequired(configVO.getSslRequired().getValue());
config.setResource(configVO.getResource());
config.setPublicClient(false);
config.setClientKeystore(configVO.getClientKeystore());
config.setClientKeystorePassword(configVO.getClientKeystorePassword());
config.setClientKeyPassword(configVO.getClientKeyPassword());
Но когда я запускаю веб-приложение и пытаюсь использовать конфигурацию (без настройки учетных данных), я получаю эту ошибку в журнале и в браузере «Запрещено» после успешной аутентификации в Keycloak, когда Keycloak возвращается в веб-приложение.
WARN [org.keycloak.adapters.authentication.ClientIdAndSecretCredentialsProvider] (default task-100) Client 'myclient' doesn't have secret available
ERROR [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-100) failed to turn code into token
ERROR [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-100) status from server: 400
ERROR [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-100) {"error":"unauthorized_client","error_description":"INVALID_CREDENTIALS: Invalid client credentials"}
Похоже, что адаптер возвращается к ClientIdAndSecretCredentials и ожидает общий секретный ключ. Но внешний интерфейс Keycloak не показывает какой-либо возможный общий секрет и какую «структуру» он должен иметь (карту с ключом + значением). Я
Также я не могу найти пример для такой аутентификации типа «Клиент». Я не уверен на 100%, отличается ли аутентификация «User Client X.509» от этой конфигурации. Я не хочу устанавливать браузер X.509 пользователь-клиент-сертификат. Я говорю только о связи между Keycloak и веб-приложением (именование с клиентом здесь немного проблематично c, потому что есть несколько клиентов). Пользователь по-прежнему должен использовать веб-интерфейс пользователя Keycloak User + Pass.
PS: Конечно, я использую самоподписанный сертификат root, который настроен как хранилище доверенных сертификатов на всех сайтах и сертификаты, подписанные с тот root сертификат на всех сайтах.