Problem
Wenn ein einzelner Benutzer (noch nicht in CRX registriert) versucht, sich anzumelden, authentifiziert CRX sich für LDAP und wenn die Authentifizierung erfolgreich ist, wird dieser Benutzer mit CRX synchronisiert. Wie erzwingen Sie die Synchronisierung von LDAP-Benutzern mit CRX, sodass Rechte zugewiesen werden können, bevor der Benutzer sich zuerst anmeldet?
Lösung
Ab CQ 5.5 Service Pack-Update [1] ist das CRX, das die LDAP-Funktionalität bereitstellt, ein OSGi-Service. LDAP wird in der Registry Service als MBean registriert. Diese MBean steht in der JMX-Konsole zur Verfügung, die die ldap-Attribute und -Methoden enthält. Die Operation, die ausgeführt werden kann, ist unter [0] aufgeführt. Einige Möglichkeiten zur Synchronisierung des Benutzers sind
- Manuelle Synchronisierung von Benutzern mithilfe der Felix-Konsole
- Verwenden der „CURL“
- Erstellen des JMX-Klienten, der MBean verwendet
Manuelle Synchronisation von Benutzern, welche die Felix-Konsole verwenden
- Öffnen Sie die Felix jmx-Konsole und melden Sie sich als Administrator unter http://<host>:<port>/system/console/jmx an
- Klicken Sie auf die Domäne com.adobe.granite.ldap und es wird eine Liste der Attribute und Operationen angezeigt, die ausgeführt werden können.
- Klicken Sie auf Vorgänge und es escheint ein Pop-up mit einem kleinem Fenster, um Parameter bereitzustellen (falls erforderlich). Bsp.: - syncUser-Vorgang, versorgen Sie DN des einzelnen Benutzers (cn = user001, ou = users, dc = tag, dc = com), der synchronisiert werden soll
- Klicken Sie auf „Aufrufen“, um entsprechende Details vom ldap-Verzeichnisserver auf „CRX“ zu übertragen.
Verwenden der „CURL“
- Verwaiste Benutzer auflisten
curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/listOrphanedUsers/ - Alle Benutzer synchronisieren
curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/syncAllUsers/ - Benutzer synchronisieren
curl -u <UID>:<PASSWORD> -X POST --data user=<cn=user001,ou=users,dc=day,dc=com> http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/syncUser/java.lang.String - Benutzerliste synchronisieren
Ex:- To sync 2 users user007 & user008 on my localhost
curl -u <UID>:<PASSWORD> -X POST --data userlist=%5B%22cn%3Duser007%2Cou%3Dusers%2Cdc%3Dday%2Cdc%3Dcom%22%2C%22cn%3Duser008%2Cou%3Dusers%2Cdc%3Dday%2Cdc%3Dcom%22%5D http://localhost:4502/system/console/jmx/com.adobe.granite.ldap%3Ahost%3Dlocalhost%2Cport%3D389%2Ctype%3DTools/op/syncUserList/%5BLjava.lang.String%3B - Benutzer bereinigen
curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/purgeUsers/ - Benutzer synchronisieren
curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/syncUsers/
JMX-Client erstellen, bei dem LDAP MBean verwendet wird
Nachfolgend finden Sie Vorlagen-jmx-Clientcode, der die Liste der verwaisten Benutzer druckt
import javax.management.DynamicMBean;
import java.util.Hashtable;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class LDAPSampleClient {
public static void main(String[] args) throws Exception{
String userid = "admin";
String password = "admin";
String serverUrl = "service:jmx:rmi:///jndi/rmi://localhost:9000/jmxrmi";
String OBJECT_NAME = "com.adobe.granite.ldap:host=localhost,port=389,type=Tools";
String[] buffer = new String[] { userid, password };
Hashtable<String, String[]> attributes = new Hashtable<String, String[]>();
attributes.put("jmx.remote.credentials", (String[]) buffer);
MBeanServerConnection server = (MBeanServerConnection) JMXConnectorFactory.connect(new JMXServiceURL(serverUrl), attributes).getMBeanServerConnection();
ObjectName name = new ObjectName(OBJECT_NAME);
LDAPUserMBean ldap = (LDAPUserMBean) MBeanServerInvocationHandler.newProxyInstance(server, name, LDAPUserMBean.class,false);
for(String user : ldap.listOrphanedUsers()) {
System.out.println(user);
}
}
public static interface LDAPUserMBean extends DynamicMBean {
public String[] listOrphanedUsers();
public String[] syncUsers(String[] users);
public void syncAllUsers();
public void syncUser(String user);
public void syncOrphanedUsers();
public void purgeOrphanedUsers();
}
}
[0]
- Verwaiste Benutzer auflisten:- Ruft eine Liste der Benutzer ab, die nicht mehr im LDAP-Verzeichnis vorhanden sind.
- Alle Benutzer synchronisieren:- Aktualisiert alle Benutzerinformationen, die auf dem LDAP-Verzeichnis basieren.
- Benutzer synchronisieren:- Aktualisiert die Benutzerinformationen für einen bestimmten LDAP-Eintrag.
- Benutzerliste synchronisieren:- Aktualisiert die lokale Benutzerinformationen für eine Liste der LDAP-Einträge.
- Benutzer entleeren:- Entfernt die Benutzerinformationen aller Benutzer, die vom LDAP-Server entfernt wurden.
- Benutzer synchronisieren:- Aktualisiert die lokalen Benutzerinformationen für die im orphaned.users-Attribut definierte Liste.
[1] http://dev.day.com/packageshare/packages/public/day/cq550/update/cq-update-pkg.html
Anmerkung: - Wenn Sie die LDAP-Konfiguration ausgeschaltet haben „OR LDAP“ nicht konfiguriert ist, ist „Mbean“ in der JMX-Konsole nicht sichtbar.
Gilt für
CRX 2.3