Перейти к содержанию

Настройка Keycloak

Система работает с провайдерами OpenID, которые используют HTTPS. Хотя можно настроить сервер Keycloak для работы по HTTP, Система может взаимодействовать только с сервером Keycloak, использующим HTTPS.

Настройте Keycloak на использование алгоритмов шифрования с открытым ключом (например, RSA256 или RSA512) вместо алгоритмов симметричного шифрования (например, HS256 или HS358) для подписи токенов. Алгоритмы шифрования с открытым ключом:

  • Проще настраивать.
  • Более безопасны, так как утечка закрытого ключа имеет серьезные последствия для безопасности.


  1. Откройте консоль администрирования Keycloak.

  2. Перейдите в Realm Settings > Tokens > Default Signature Algorithm.

  3. Настройте алгоритм подписи.

Настройка Keycloak с использованием симметричного алгоритма шифрования

Примечание

Следующие инструкции приведены для полноты картины, но используйте симметричное шифрование только в случае крайней необходимости.

Для использования симметричного шифрования:

  1. Извлеките секретный ключ из базы данных Keycloak. Keycloak не предоставляет это значение через веб-интерфейс. Секрет клиента, видимый в веб-интерфейсе, является секретом клиента OAuth 2.0, который отличается от секрета, используемого для подписи JSON Web Token (JWT).

    Например, если вы используете PostgreSQL в качестве базы данных для Keycloak:

    • Войдите в консоль базы данных.
    • Выполните следующий SQL-запрос для извлечения ключа:

      $ psql -U keycloak
      psql (13.3 (Debian 13.3-1.pgdg100+1))
      Type "help" for help.
      
      keycloak=# SELECT c.name, value FROM component_config CC INNER JOIN component C ON(CC.component_id = C.id) WHERE C.realm_id = 'master' and provider_id = 'hmac-generated' AND CC.name = 'secret';
      -[ RECORD 1 ]---------------------------------------------------------------------------------
      name  | hmac-generated
      value | lo6cqjD6Ika8pk7qc3fpFx9ysrhf7E62-sqGc8drp3XW-wr93zru8PFsQokHZZuJJbaUXvmiOftCZM3C4KW3-g
      -[ RECORD 2 ]---------------------------------------------------------------------------------
      name  | fallback-HS384
      value | UfVqmIs--U61UYsRH-NYBH3_mlluLONpg_zN7CXEwkJcO9xdRNlzZfmfDLPtf2xSTMvqu08R2VhLr-8G-oZ47A
      

    В этом примере есть два закрытых ключа: один для HS256 (hmac-generated) и другой для HS384 (fallback-HS384). Мы используем первое значение value для настройки Системы.

  2. Преобразуйте значение value в стандарт base64. Значение должно быть закодировано в формате Base64 с использованием URL-безопасного алфавита. Следующий скрипт на Ruby выполняет это преобразование:

    require 'base64'
    
    value = "lo6cqjD6Ika8pk7qc3fpFx9ysrhf7E62-sqGc8drp3XW-wr93zru8PFsQokHZZuJJbaUXvmiOftCZM3C4KW3-g"
    Base64.encode64(Base64.urlsafe_decode64(value))
    

    Это приводит к следующему значению:

      lo6cqjD6Ika8pk7qc3fpFx9ysrhf7E62+sqGc8drp3XW+wr93zru8PFsQokH\nZZuJJbaUXvmiOftCZM3C4KW3+g==\n
    
  3. Укажите этот секрет, закодированный в base64, в параметре jwt_secret_base64.

    Если вы видите ошибку JSON::JWS::VerificationFailed, значит, был указан неверный секрет.