Keycloak
Документ отвечает на один вопрос: как сделать, чтобы сотрудник со страницы входа Keycloak попадал в портал смены пароля и не вводил логин второй раз.
Что нужно понимать до настройки
Заголовок раздела «Что нужно понимать до настройки»Keycloak в такой схеме — точка входа в приложения, а не в портал паролей. Сценарий «забыл пароль» им закрыть нельзя по построению: чтобы пройти аутентификацию в Keycloak, нужен пароль, которого у человека как раз и нет. Поэтому портал остаётся отдельным адресом, доступным без входа, а Keycloak только приводит на него человека.
Сам пароль всегда меняется в каталоге. Keycloak с LDAP-федерацией видит те же учётные записи; отдельных паролей на его стороне при связке с AD нет, синхронизировать нечего.
Ссылка со страницы входа
Заголовок раздела «Ссылка со страницы входа»В теме входа (login.ftl) добавляется ссылка на портал. Логин, если человек уже
начал его вводить, передаётся параметром — портал подставит его в форму:
<a href="https://passwords.example.ru/change?username=${(login.username!'')?url}"> Сменить пароль</a><a href="https://passwords.example.ru/reset?username=${(login.username!'')?url}"> Забыли пароль?</a>Портал принимает логин под тремя именами: login, username и login_hint. Последнее
— стандартный параметр OIDC, и если приложение уже знает пользователя, ссылка может
выглядеть так: /change?login_hint=ivanov@corp.example.ru. Доменная часть UPN
отбрасывается, в форму попадает sAMAccountName.
Значение проверяется: принимаются только символы имени учётной записи и не длиннее 64 знаков, иначе поле остаётся пустым. Ссылка не может положить в форму произвольный текст, и подставленный логин ничего не подтверждает — он лишь избавляет от повторного ввода.
Что остаётся на стороне Keycloak
Заголовок раздела «Что остаётся на стороне Keycloak»- Федерация с AD. LDAP-провайдер типа Active Directory, режим
READ_ONLYдостаточен: пароли меняет портал, Keycloak их не пишет. - Кэш учётных записей. После смены пароля Keycloak продолжит принимать старый до
истечения своего кэша; при
READ_ONLYиImport Users: offэтого не происходит. - Ссылка «Забыли пароль?» самого Keycloak (
Forgot passwordв Realm settings) отправляет письмо со ссылкой на смену пароля в Keycloak. При связке с AD в режиме только на чтение её нужно выключить — иначе сотрудник получит форму, которая ничего не изменит в каталоге.
Чего в продукте нет
Заголовок раздела «Чего в продукте нет»Возврата в Keycloak после смены пароля (redirect_uri, return_to) портал не
поддерживает намеренно: параметр возврата на странице, доступной без аутентификации, —
это открытый редирект, и закрывать его пришлось бы белым списком адресов. Если такой
сценарий понадобится, он делается списком разрешённых адресов в конфигурации;
по умолчанию портал заканчивает работу своей страницей «Готово».
Входа администратора через Keycloak (OIDC) тоже нет: интерфейс администратора аутентифицирует по каталогу и требует второй фактор. Если единая точка входа нужна и для него, это отдельная задача.