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

如何在 Micronaut GraphQL 中使用 Keycloak JWT 进行身份验证

Keycloak Angular 2 - 检查身份验证状态 Keycloak 对象