2016-11-04 10 views
0

Ich versuche, einen Beispielbenutzerföderationsprovider zu einer neuen Version von keycloak (https://github.com/Smartling/keycloak-user-migration-provider) zu migrieren, aber ich finde keine offensichtliche Dokumentation um inkompatible API-Änderungen (dh die UserFederationProvider-Schnittstelle scheint ersetzt worden zu sein) mit einigen spezifischeren Schnittstellen, aber es scheint keine Beispiele zu geben, wie man zwischen ihnen migriert).Keycloak Federation SPI-Änderungen

Ich glaube, ich habe die meisten Änderungen bekommen, indem sie die keycloak Proben nach, aber ich bin verwirrt, wo in dem Smart Beispiel RemoteUserFederationProvider Verwendung der UserModel Schnittstelle macht, die eine updateCredential Methode, die in entfernt worden zu sein scheint Die neueste version. Wie sollte dies in neueren Versionen von Keycloak implementiert werden?

Antwort

0

Ich denke, dass die Änderung UserModel irgendwo zwischen Keycloak 1.7 und 2.0 passiert.

Dieses Snippet stammt aus unserer Keycloak 2.0-Implementierung.

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); 
    } 
} 

Hoffe das hilft.