Keycloak Authentication x.509 без общего секрета - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть 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 сертификат на всех сайтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...