Настройка Keycloak¶
Система работает с провайдерами OpenID, которые используют HTTPS. Хотя можно настроить сервер Keycloak для работы по HTTP, Система может взаимодействовать только с сервером Keycloak, использующим HTTPS.
Настройте Keycloak на использование алгоритмов шифрования с открытым ключом (например, RSA256 или RSA512) вместо алгоритмов симметричного шифрования (например, HS256 или HS358) для подписи токенов. Алгоритмы шифрования с открытым ключом:
- Проще настраивать.
- Более безопасны, так как утечка закрытого ключа имеет серьезные последствия для безопасности.
-
Откройте консоль администрирования Keycloak.
-
Перейдите в Realm Settings > Tokens > Default Signature Algorithm.
-
Настройте алгоритм подписи.
Настройка Keycloak с использованием симметричного алгоритма шифрования¶
Примечание
Следующие инструкции приведены для полноты картины, но используйте симметричное шифрование только в случае крайней необходимости.
Для использования симметричного шифрования:
-
Извлеките секретный ключ из базы данных 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для настройки Системы. -
Преобразуйте значение
valueв стандарт base64. Значение должно быть закодировано в формате Base64 с использованием URL-безопасного алфавита. Следующий скрипт на Ruby выполняет это преобразование:require 'base64' value = "lo6cqjD6Ika8pk7qc3fpFx9ysrhf7E62-sqGc8drp3XW-wr93zru8PFsQokHZZuJJbaUXvmiOftCZM3C4KW3-g" Base64.encode64(Base64.urlsafe_decode64(value))Это приводит к следующему значению:
lo6cqjD6Ika8pk7qc3fpFx9ysrhf7E62+sqGc8drp3XW+wr93zru8PFsQokH\nZZuJJbaUXvmiOftCZM3C4KW3+g==\n -
Укажите этот секрет, закодированный в base64, в параметре
jwt_secret_base64.Если вы видите ошибку
JSON::JWS::VerificationFailed, значит, был указан неверный секрет.