Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确添加keydape用户迁移提供程序?_Java_Maven_Authentication_Gradle_Keycloak - Fatal编程技术网

Java 如何正确添加keydape用户迁移提供程序?

Java 如何正确添加keydape用户迁移提供程序?,java,maven,authentication,gradle,keycloak,Java,Maven,Authentication,Gradle,Keycloak,我遇到的问题是,我不能让我的keybeapt项目正常工作 密钥斗篷的版本:7.0.0 KeyClope用户迁移提供程序的版本来自以下链接: 从上面的README.md中,他们创建了一个文件,并显示了安装联合提供程序 standalone/configuration/keydove server.json并将其添加到keydove server.json中 "providers": [ "classpath:${jboss.server.config.dir}/providers/*",

我遇到的问题是,我不能让我的keybeapt项目正常工作

密钥斗篷的版本:7.0.0 KeyClope用户迁移提供程序的版本来自以下链接: 从上面的README.md中,他们创建了一个文件,并显示了安装联合提供程序

standalone/configuration/keydove server.json
并将其添加到
keydove server.json

"providers": [
  "classpath:${jboss.server.config.dir}/providers/*",
  "module:net.smartling.provider.federation"
],
在旧版本的keydove(1.7.0)中,我看到他使用keydove-server.json。然而,我使用的是7.0.0版本,它完全没有向我的KeyClope项目添加新的提供者

我尝试将这两个提供者对象放入standalone.xml

配置文件的路径是:
keydepot-7.0.0/standalone/configuration/standalone.xml

<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
    <web-context>auth</web-context>
    <providers>
        <provider>classpath:${jboss.home.dir}/providers/*</provider>
        <provider>classpath:${jboss.server.config.dir}/providers/*</provider>
        <provider>module:net.smartling.provider.federation</provider>
    </providers>

... 

我有一些进步。这是不方便写在评论,所以我把这个作为答案

根据[keydape docs storage provider](),它们不再支持UserFedarationProvider。他们仍然在keydape服务器spi包中有它,但它只是实现接口的列表

因此,从简单开始

我已经创建了实现两个接口的提供者

public class MyUserMigrationProvider implements UserStorageProvider, CredentialInputValidator, UserLookupProvider
创建了我的工厂

public class MyUserMigrationFactory implements UserStorageProviderFactory<MyUserMigrationProvider> {
文件,并将工厂类的全名添加到其中

重新启动keyclok后,构建jar并将其放入
standalone/deployments

要迁移用户,必须实现几个提供程序方法

@Override
    public boolean isConfiguredFor(RealmModel realm, UserModel user, String credentialType) {
        logger.warn("isConfiguredFor");
        return credentialType.equals(CredentialModel.PASSWORD);
    }

    @Override
    public boolean supportsCredentialType(String credentialType) {
        logger.warn("supportsCredentialType");
        return credentialType.equals(CredentialModel.PASSWORD);
    }

    @Override
    public boolean isValid(RealmModel realm, UserModel user, CredentialInput input) {
        logger.warn("isValid {} {}", user.getUsername(), input);
        if (!supportsCredentialType(input.getType()) || !(input instanceof UserCredentialModel))
            return false;

        UserCredentialModel cred = (UserCredentialModel)input;

        // pretend validating user password
        boolean isValid = cred.getValue().equals("123");


        // If the user is valid create user in local store
        if (isValid) {

            UserModel user= session.users().addUser(realm, user.getUsername());
            adminUser.setEnabled(true);

            UserCredentialModel usrCredModel = new UserCredentialModel();
            usrCredModel.setType(UserCredentialModel.PASSWORD);
            usrCredModel.setValue(cred.getValue());

            session.userCredentialManager().updateCredential(realm, user, usrCredModel);
            // add roles if needed
            // RoleModel adminRole = realm.getRole(AdminRoles.ADMIN);
            // user.grantRole(adminRole);

        }

        return isValid;
    }
我不知道你打算在你的供应商做什么。对于不同的事情,您需要实现的不同接口很少


有关接口示例,请参阅11.3;对于旧用户迁移,请参阅11.13。

HI。您是否尝试将其注册为中6.2.2所述的模块?如果您遵循6.2.1,它也应该自动部署。我自己没试过。刚开始我不确定为什么模块设置不正确。我确定了正确的配置。也许是版本问题,我有一些进展。看看11.5。我添加了带有类名的meta inf文件,并将jar复制到部署中,如6.2.1所示。它开始加载并崩溃。可能必须使用jdk8,而我使用的是11。将在周二继续,如果有任何成功,将更新。是的,我也遇到了同样的崩溃。我花了两个星期的时间想办法解决这个问题。我最终使用了Auth0。我还将jdk8用于该项目。当你弄明白的时候就更新
META-INF/services/org.keycloak.storage.UserStorageProviderFactory
@Override
    public boolean isConfiguredFor(RealmModel realm, UserModel user, String credentialType) {
        logger.warn("isConfiguredFor");
        return credentialType.equals(CredentialModel.PASSWORD);
    }

    @Override
    public boolean supportsCredentialType(String credentialType) {
        logger.warn("supportsCredentialType");
        return credentialType.equals(CredentialModel.PASSWORD);
    }

    @Override
    public boolean isValid(RealmModel realm, UserModel user, CredentialInput input) {
        logger.warn("isValid {} {}", user.getUsername(), input);
        if (!supportsCredentialType(input.getType()) || !(input instanceof UserCredentialModel))
            return false;

        UserCredentialModel cred = (UserCredentialModel)input;

        // pretend validating user password
        boolean isValid = cred.getValue().equals("123");


        // If the user is valid create user in local store
        if (isValid) {

            UserModel user= session.users().addUser(realm, user.getUsername());
            adminUser.setEnabled(true);

            UserCredentialModel usrCredModel = new UserCredentialModel();
            usrCredModel.setType(UserCredentialModel.PASSWORD);
            usrCredModel.setValue(cred.getValue());

            session.userCredentialManager().updateCredential(realm, user, usrCredModel);
            // add roles if needed
            // RoleModel adminRole = realm.getRole(AdminRoles.ADMIN);
            // user.grantRole(adminRole);

        }

        return isValid;
    }