Keycloak Federation SPI的变化

时间:2016-11-04 17:10:52

标签: keycloak

我正在尝试将示例用户联合提供程序迁移到新版本的keycloak(https://github.com/Smartling/keycloak-user-migration-provider),但我找不到任何关于不兼容API更改的明显文档(即UserFederationProvider界面似乎已被替换为几个更具体的接口,但似乎没有任何关于如何在它们之间进行迁移的示例。)

我认为我已经通过跟踪keycloak示例获得了大部分更改,但我很困惑,在Smartling示例RemoteUserFederationProvider中使用了UserModel接口,其中有{updateCredential接口1}}似乎已在最新版本中删除的方法。如何在更新版的Keycloak中实现?

1 个答案:

答案 0 :(得分:1)

我认为UserModel的变化发生在Keycloak 1.7和2.0之间。

此代码段来自我们的Keycloak 2.0实现。

package org.sample.keycloak.federation;

import org.keycloak.models.UserCredentialModel;
import org.keycloak.models.UserCredentialValueModel;
import org.keycloak.models.UserModel;
import org.keycloak.models.utils.UserModelDelegate;

/**
 * Readonly proxy for a UserModel that prevents passwords from being updated.
 *
 * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
 * @version $Revision: 1 $
 */
public class UserModelProxy extends UserModelDelegate {

    public UserModelProxy(UserModel delegate) {
        super(delegate);
    }

    @Override
    public void setUsername(String username) {
        throw new IllegalStateException("Username is readonly");
    }

    @Override
    public void updateCredentialDirectly(UserCredentialValueModel cred) {
        if (cred.getType().equals(UserCredentialModel.PASSWORD)) {
            throw new IllegalStateException("Passwords are readonly");
        }
        super.updateCredentialDirectly(cred);
    }

    @Override
    public void updateCredential(UserCredentialModel cred) {
        if (cred.getType().equals(UserCredentialModel.PASSWORD)) {
            throw new IllegalStateException("Passwords are readonly");
        }
        super.updateCredential(cred);
    }
}

希望这有帮助。