Keycloak Script 基本身份验证器在失败时出现相同的错误消息
Posted
技术标签:
【中文标题】Keycloak Script 基本身份验证器在失败时出现相同的错误消息【英文标题】:Keycloak Script base authenticator same error message on failure 【发布时间】:2019-01-08 23:04:34 【问题描述】:需要在基于 keycloak 脚本的身份验证器中发送自定义错误消息。
失败时显示相同的错误消息Incorrect email or password. Please check and try again.
如何发送自定义错误消息?
代码:
function authenticate(context)
var username = user ? user.username : "anonymous";
var authShouldFail = false;
if (username=="anonymous")
context.failure(AuthenticationFlowError.INVALID_CLIENT_CREDENTIALS);
return;
context.success();
【问题讨论】:
【参考方案1】:我搜索了keycloak存储库的源代码,终于想出了一个解决方案。答案是使用setError
方法来显示自定义错误消息并使用context.failureChallenge
函数而不是context.failure
,如下代码:
// import the required Java classes
AuthenticationFlowError = Java.type("org.keycloak.authentication.AuthenticationFlowError");
Response = Java.type("javax.ws.rs.core.Response");
Errors = Java.type("org.keycloak.events.Errors");
function authenticate(context)
var showCustomError = true; // you need to make your own controls to set this property
if (showCustomError)
var errorMessage = "this is custom error message"; // set your custom error message
context.getEvent().error(Errors.IDENTITY_PROVIDER_ERROR);
var challengeResponse = context.form().setError(errorMessage, []).createErrorPage(Response.Status.INTERNAL_SERVER_ERROR);
context.failureChallenge(AuthenticationFlowError.IDENTITY_PROVIDER_ERROR, challengeResponse);
return;
context.success();
【讨论】:
以上是关于Keycloak Script 基本身份验证器在失败时出现相同的错误消息的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 我无法切换 keycloak 和基本身份验证
如何使基本身份验证作为 Angular JS/Spring 启动应用程序中 keycloak 的替代品
Spring Boot webservice (REST) - 如何将 JUnit 5 测试从基本身份验证更改为 OAuth2 (Keycloak)
如何在 Keycloak 身份验证之前调用 javax.servlet.Filter