在keycloak中使用自定义身份验证类,而不是AbstractUsernameFormAuthenticator

Using a custom authentication class in keycloak instead of AbstractUsernameFormAuthenticator

提问人:omar amer 提问时间:10/25/2023 更新时间:10/30/2023 访问量:36

问:

所以我正在尝试使用一个自定义类,它将覆盖

AbstractUsernameFormAuthenticator 

类已在 Keycloak 中使用。

1- 我创建了一个自定义提供程序 2-生成了一个罐子 3- 将 jar 添加到 keycloak 的 provider 目录中。

我正在使用 keycloak 版本 22.0.4

那么我错过了什么?

下面是具有重写方法的类

public class CustomAuthenticator extends UsernamePasswordForm {

    @Override
    protected String disabledByBruteForceError() {
        return Messages.ACCOUNT_TEMPORARILY_DISABLED;
    }
}

这是 CustomAuthenticatorFactory

public class CustomAuthenticatorFactory implements AuthenticatorFactory, ConfigurableAuthenticatorFactory {

    public static final String PROVIDER_ID = "custom-authenticator";
    private static final CustomAuthenticator SINGLETON = new CustomAuthenticator();

    @Override
    public String getId() {
        return PROVIDER_ID;
    }

    @Override
    public String getDisplayType() {
        return "Custom Authenticator";
    }

    @Override
    public String getReferenceCategory() {
        return null;
    }

    @Override
    public boolean isConfigurable() {
        return false;
    }

    @Override
    public AuthenticationExecutionModel.Requirement[] getRequirementChoices() {
        return Arrays.asList(AuthenticationExecutionModel.Requirement.REQUIRED).toArray(new AuthenticationExecutionModel.Requirement[0]);
    }

    @Override
    public boolean isUserSetupAllowed() {
        return false;
    }

    @Override
    public String getHelpText() {
        return null;
    }

    @Override
    public List<ProviderConfigProperty> getConfigProperties() {
        return null;
    }

    @Override
    public void init(Config.Scope scope) {

    }

    @Override
    public void postInit(KeycloakSessionFactory keycloakSessionFactory) {

    }

    @Override
    public void close() {

    }

    @Override
    public Authenticator create(KeycloakSession session) {
        return SINGLETON;
    }
}

这是 resources/META-INF/services 中 org.keycloak.authentication.AuthenticatorFactory 的内容

com.identicum.keycloak.CustomAuthenticatorFactory

最后是 jboss-deployment-structure

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <module-alias name="deployment.keycloak-custom-authenticator"/>
        <dependencies>
            <module name="org.keycloak.keycloak-core"/>
            <module name="org.keycloak.keycloak-server-spi"/>
            <module name="org.keycloak.keycloak-server-spi-private"/>
            <module name="org.keycloak.keycloak-services"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

1- 我创建了一个自定义提供程序 2-生成了一个罐子 3- 将 jar 添加到 keycloak 的 provider 目录中。

我正在使用 keycloak 版本 22.0.4

模块 keycloak 提供程序 自定义身份验证

评论


答:

0赞 omar amer 10/30/2023 #1

经过一番尝试,我终于能够做到了。您需要做的就是: 1- 将编译的 jar 添加到 keycloak 安装中的 providers 目录。 2- 复制登录流程,并向复制的流程添加自定义身份验证步骤。 3- 绑定流,使其成为使用的主流。