Как настроить Kerberos аутентификации в Keycloak
Виктор Попов, техлид DevOps-команды в X5 Tech и спикер курса «Безопасность проекта: аутентификация в Keycloak», подготовил туториал. В нём он рассказывает, как настроить Kerberos аутентификации в Keycloak и как подготовить браузеры для работы.
Настройка Kerberos аутентификации в Keycloak
Какие имена использовались на тестовом стенде:
domain controller: WIN-0KIV48GRJRV.keycloak.local
domain name: keycloak.local
keycloak vm: keycloak.keycloak.local
AD user для кербероса: CN=keycloak,OU=kk-users,DC=keycloak,DC=local
Шаг 1
Создаём пользователя в АД. Этот пользователь будет использоваться для интеграции Keycloak с Kerberos.
Шаг 2
Дальше нужно получить keycloak.keytab. Для этого на виндовой машине выполняем:
ktpass -out keycloak.keytab -princ
HTTP/keycloak.keycloak.local@KEYCLOAK.LOCAL -mapUser
keycloak@KEYCLOAK.LOCAL
-pass $PASS -kvno 0 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT
-princ — это адрес Keycloak;
-mapUser — это пользователь, для которого регистрируется SPN и генерируется keytab;
-pass — это пароль пользователя;
остальное — магия, которую нужно оставить как есть.
Шаг 3
Регистрируем SPN:
setspn -A HTTP/keycloak.local@KEYCLOAK.LOCAL keycloak
Для этого нужны права в АД.
Шаг 4
В настройках user federation Keycloak включаем Kerberos Integration:
В Kerberos realm прописываем имя домена заглавными буквами.
В Server Principal прописываем principal, на который создан keytab file. В пункте 2 (ключ -princ).
В KeyTab — путь до keytab файла.
Шаг 5
Подкладываем keytab в контейнер по указанному пути.
Шаг 6
В примере используется шифрование RC4-HMAC-NT. Его нужно разрешить в контейнере с Keycloak.
Для этого в контейнере в файл /etc/krb5.conf.d/crypto-policies добавляем rc4-hmac в строку permitted_enctypes
Шаг 7
В Realm во вкладке Authentication переключаем kerberos в Alternative для flow. Обычно это нужно делать только для browser flow.
Настройка браузеров для работы
Internet explorer
В IE нужно добавить адрес в trusted sites:
Chrome
Нужно запустить Chrome со следующими ключами:
chrome.exe --auth-server-whitelist="*.keycloak.local"
--auth-negotiate-delegate-whitelist="*.keycloak.local"
Либо настроить через групповую политику:
AuthServerWhitelist = *.keycloak.local
Firefox
Нужно зайти в about:config и найти там следующие настройки:
network.negotiate-auth.trusted-uris
network.automatic-ntlm-auth.trusted-uris
В них прописать адрес сервера Keycloak.
Примечание редакции
Виктор Попов — один из администраторов русскоязычного Keycloak комьюнити. Если у вас возникли вопросы по работе с Keycloak, вы всегда можете задать их в комьюнити.