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

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie