Изменения SPI Федерации Keycloak Federation

Я пытаюсь перенести пример провайдера федерации пользователей на новую версию keycloak (https://github.com/Smartling/keycloak-user-migration-provider), но я не нахожу очевидной документации по несовместимым изменениям API (т.е. интерфейс UserFederationProvider, похоже, был заменен несколькими более конкретными интерфейсами, но похоже, нет никаких примеров того, как мигрировать между ними).

Я думаю, что я получил большинство изменений, следуя образцам keycloak, но меня смущает, где в примере Smartling RemoteUserFederationProvider используется интерфейс UserModel, в котором есть метод updateCredential, который, похоже, был удален в последней версии. Как это должно быть реализовано в более поздних версиях Keycloak?


person Chris Cooper    schedule 04.11.2016    source источник


Ответы (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:[email protected]">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);
    }
}

Надеюсь это поможет.

person pygator    schedule 05.11.2016