問題

個別のユーザー(まだ CRX に登録されていない)がログインしようとすると、LDAP に対して CRX 認証が行われ、認証が成功するとユーザーは CRX と同期されます。したがって、ユーザーが最初にログインを試行する前に、権限を割り当てるために LDAP ユーザーを CRX と同期させる方法を教えてください。

解決策

CQ 5.5 サービスパックのアップデート [1] から、ldap 機能を提供する CRX は OSGi サービスです。LDAP は、OSGi サービスレジストリに MBean サービスとして登録されています。この MBean は、ldap 属性と操作を公開する JMX コンソールで使用できます。実行できる操作は、[0] に一覧表示されます。ユーザーの同期を実現する方法の一部は

  • felix コンソールを使用したユーザーの手動同期
  • CURL の使用
  • LDAP MBean を使用する JMX クライアントの作成

felix コンソールを使用するユーザーの手動同期

  • http://<host>:<port>/system/console/jmx の felix jmx コンソールを開いて、管理者としてログインします。
  • domain com.adobe.granite.ldap をクリックすると、属性と実行可能な操作のリストが表示されます。
  • 操作をクリックし、小さなウィンドウでポップアップしてパラメーターを指定します(必要な場合)。例:- syncUser 操作、同期する単一のユーザー(cn=user001,ou=users,dc=day,dc=com)DN を提供します。
  • 「Invoke」をクリックして ldap ディレクトリサーバーから CRX に適切な詳細を転送します。

CSV の使用

  • List Orphaned Users
    curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/listOrphanedUsers/
  • Sync All Users
    curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/syncAllUsers/
  • Sync User
    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
  • Sync User List
    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
  • Purge Users
    curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/purgeUsers/
  • Sync Users
    curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.ldap:host=<ldaphost>,port=<ldapport>,type=Tools/op/syncUsers/

LDAP MBean を使用する JMX クライアントの作成

孤立ユーザーの一覧を印刷するサンプル jmx クライアントコードは次のとおりです

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]

  • 孤立ユーザーの一覧:LDAP ディレクトリに存在しないユーザーのリストを取得します。
  • すべてのユーザーを同期:LDAP ディレクトリに基づいてすべてのローカルユーザー情報を更新します。
  • ユーザーを同期:特定の LDAP エントリのローカルユーザー情報を更新します。
  • ユーザーリストを同期:LDAP エントリのリスト用のローカルユーザー情報を更新します。
  • ユーザーのパージ:LDAP サーバーから削除されたすべてのユーザーのローカルユーザー情報を削除します。
  • ユーザーの同期:orphaned.users 属性で定義されたリストのローカルユーザー情報を更新します。

[1] http://dev.day.com/packageshare/packages/public/day/cq550/update/cq-update-pkg.html


注意:-LDAP 設定を抜き取ったか、LDAP を設定していない場合、Mbean は JMX コンソールでは表示されません。

適用対象

CRX 2.3

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー