2016-04-08 6 views
0

Ich versuche, einen benutzerdefinierten Authentifikator für die Verwendung mit WSO2-IS und WSO2-APIM zu implementieren. Ich kann jedoch keine Möglichkeit finden, dem authentifizierten Benutzer eine Rolle zuzuweisen.WSO2IS/APIM: Benutzerrolle in einem benutzerdefinierten Authentifikator zuweisen

Ich möchte der authentifizierte Benutzer die Rolle "Kunde" haben. Unten ist der Code, den ich in der Methode processAuthenticationResponse verwendet habe.

Map<ClaimMapping, String> claims = new HashMap<ClaimMapping, String>(); 
claims.put(ClaimMapping.build("http://wso2.org/claims/role", "http://wso2.org/claims/role", null, false), "customer"); 

AuthenticatedUser user = AuthenticatedUser.createLocalAuthenticatedUserFromSubjectIdentifier("xxxxxx"); 
context.setSubject(user); 

Jede Anleitung zur korrekten Implementierung wird sehr geschätzt.

Vielen Dank.

Antwort

0

Ich habe eine Lösung für mein Problem gefunden. Zusätzlich zu meinem Code im benutzerdefinierten Verbundauthentifizierer für die Zuweisung der Rolle an http://wso2.org/claims/role Anspruch muss ich auch Just-In-Time provisioning aktivieren, dann wird der von meinem benutzerdefinierten Verbundauthentifizierer authentifizierte Benutzer in WSO2 mit der angegebenen Rolle erstellt.

PS. Ich kann den Benutzer immer noch nicht authentifizieren, indem der benutzerdefinierte Authentifikator eine bestimmte Rolle hat, ohne dass der Benutzer in WSO2 über die Just-in-Time-Bereitstellung zuerst erstellt werden muss.

0

Ich nehme an, Sie haben bereits eine Rolle namens "Kunde" in Ihrem Benutzergeschäft. Sie können hier eine benutzerdefinierte UserStoreEventListener implementieren, indem Sie org.wso2.carbon.user.core.listener.UserOperationEventListener implementieren. Bei Ihrer Komponentenaktivierung müssen Sie diesen Listener als osgi-Service registrieren.

protected void activate(ComponentContext context) { 

    YourListener yourListener = 
      new YourListener(); 
    context.getBundleContext().registerService(
      UserOperationEventListener.class.getName(), yourListener, null); 
} 

Sie können diese Hörer schreiben von org.wso2.carbon.user.core.common.AbstractUserOperationEventListener erstreckt, die eine abstrakte Implementierung dieser Schnittstelle ist.

Dann durch die Implementierung postAuthenticate Methode können Sie erforderliche Funktionalität wie folgt hinzufügen.

import org.wso2.carbon.user.core.common.AbstractUserOperationEventListener; 

public class YourListener extends AbstractUserOperationEventListener { 
public boolean isEnable() { 
    //add implementation to this or you can enable always by returning true 
} 

public int getOrderId() { 
    //give the order this listener should executed eg-:120 
} 

@Override 
public boolean doPostAuthenticate(String userName, boolean authenticated, 
            UserStoreManager userStoreManager) throws UserStoreException { 

    userStoreManager.updateRoleListOfUser(userName,new String[0], new String[]{"customer"}); 
} 
} 
+0

Vielen Dank für Ihre Vorschläge. Allerdings habe ich es probiert und es funktioniert immer noch nicht. Ich habe debugged und es scheint, dass die Methode DoPostAuthenticate nicht aufgerufen wird, nachdem ich den Benutzer in benutzerdefinierten Authentifikator authentifizieren. Weitere Informationen. Ich habe die Rolle "Kunde" im Benutzerspeicher definiert. Der Benutzername, den ich über benutzerdefinierten Authentifizierer authentifizierte, befindet sich jedoch nicht in dem Benutzerspeicher. (Deshalb muss ich einen benutzerdefinierten Authentifikator schreiben). Ist das der richtige Ansatz? – tinnapat

+0

Wenn die Methode 'doPostAuthenticate' nicht aufgerufen wird, sollte dies ein Problem bei der Registrierung Ihres Dienstes sein. Überprüfen Sie, ob Ihr Hörer richtig registriert ist. Sind Ihre Benutzer- und Kundenrolle in zwei verschiedenen Benutzerspeichern? Sie können einem Benutzer in einem anderen Benutzerspeicher –

+0

Hi Chamila keine Rolle in einem anderen Benutzerspeicher zuweisen. Sorry meine Frage war nicht klar. Ich versuche, einen benutzerdefinierten Authentifikator zu schreiben, der einen Benutzer über eine mobile Anwendung authentifiziert (ähnlich wie OTP, dass wir einen Code an die mobile Anwendung des Benutzers senden und der Benutzer den Code zurück in die Authentifizierungsendpunkt-Anmeldeseite eingeben muss. Wenn es übereinstimmt, ist der Benutzer authentifiziert unter Verwendung der Handynummer als Subjektkennung), so dass der Benutzer nicht in einem Benutzerspeicher gespeichert wird. Ich möchte jedoch, dass der authentifizierte Benutzer die Rolle "Kunde" hat, da ich den Gültigkeitsbereich in APIM für Benutzer mit der Rolle "customer" angeben muss. Ist das in meinem Szenario möglich? Vielen Dank – tinnapat

Verwandte Themen