問題
個別のユーザー(まだ 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
アカウントにログイン