当用户在太短的时间内多次登录失败后,有没有办法让 Keycloak 登录屏幕告诉用户他们被暂时锁定,以便他们知道他们必须等待并稍后再试?
目前,它继续告诉他们他们的密码错误,所以他们可能会继续尝试,最终可能会被告知他们的正确密码不正确。
当用户在太短的时间内多次登录失败后,有没有办法让 Keycloak 登录屏幕告诉用户他们被暂时锁定,以便他们知道他们必须等待并稍后再试?
目前,它继续告诉他们他们的密码错误,所以他们可能会继续尝试,最终可能会被告知他们的正确密码不正确。
Keycloak 使您可以定义自定义消息并提供自定义主题,您可以在其中覆盖某些视图和消息以及提供其他语言的消息。
https://www.keycloak.org/docs/latest/server_development/#_themes
您可以修改消息键“invalidUserMessage”,即用户被锁定时显示的消息。它默认为'Invalid username or password'。
我们通过为登录类型提供自定义主题来做到这一点,但您可以在'keycloak/themes/base/login/messages/messages_en.properties'修改 keycloak 安装提供的消息密钥。
当您提供自定义login-password.ftl或login.ftl时,取决于您使用的内容,然后您可以在渲染期间检查消息,并有条件地渲染仅在用户被锁定时显示的部分。
<#assign userLocked = message?? && message.summary == msg("invalidUserMessage")>
<#if section = "header" && !userLocked >...<#/if>
例如,当我们看到用户被锁定并向用户显示修改后的消息时,我们在 javascript 中使用它来禁用所有输入。
<script>
const serverFieldErrors = {
"password": "${(message.summary)!""}"
}
if (serverFieldErrors.password === "${msg('invalidUserMessage')}") {
document.querySelectorAll("input").forEach((element) => element.setAttribute("disabled", "disabled"));
}
</script>
据我所知,keycloak 没有提供其他方法来处理这种用例。