Come avrete intuito dai miei ultimi post su questa lista mi devo occupare di nuovo di autenticazione su siti Plone. Le condizioni al contorno sono: - utenti e gruppi (con relativo mapping gruppo<->ruolo) su fonte esterna: nello specifico Active Directory; - autenticazione sicura: apache con mod_rewrite per switch automatico su SSL per sessioni autenticate.
Il secondo punto sembra funzionare a modino, sul primo al contrario, sono in alto mare. Prodotti utilizzati: * Plone 4.1.4 (Python 2.6.6) * Products.PloneLDAP 1.1 #Required by: #Products.PloneLDAP 1.1 * Products.LDAPMultiPlugins = 1.14 #Required by: #Products.PloneLDAP 1.1 * Products.LDAPUserFolder = 2.23 #Required by: #Products.LDAPUserFolder 2.23 * dataflake.fakeldap = 1.0 #Required by: #Products.LDAPUserFolder 2.23 *python-ldap = 2.4.10 plone.app.ldap = 1.2.8 non mi serve, IMHO fa solo casino nel pannello di controllo. In ogni caso l'ho provato e il problema che tengo non cambia di una virgola. Ma quale è il mio problema? Penso di aver configurato il "Plone Active Directory Plugin" nel migliore dei modi seguendo mille guide e, per funzionare funziona, ma... E' LENTO! Che LDAP non sia un fulmine nel risolvere le query è noto da tempo, ma il problema, per quel che ho scoperto sino ad adesso, è che Zope/Plone fa centinaia di query LDAP per ogni pagina richiesta dal singolo utente senza tenere in cache praticamente nulla. Esempio: Con l'utente già "loggato" quando chiedo di servirmi una pagina ottengo: "tcpdump tcp port 389" -> 2032 packets captured Analizzando i pacchetti con wireshark trovo centinaia di query LDAP identiche: binding con manager per risolvere sempre lo stesso utente e lo stesso gruppo. Sessione di navigazione di esempio: login -> visualizzazione pagina News ed eventi, creazione di folder "Prova" e ritorno a root del sito. Ottengo 9731 pacchetti sulla porta 389 Con il filtro "ldap.searchRequest" trovo 2431 pacchetti. Nall'apposita pagina ZMI ho i parametri di cache settati a 600 secondi: per 10 minuti in teoria non dovrebbe disturbare LDAP... ma la pratica (molto empirica) sembra dire l'esatto contrario. Ora... come si risolve questa cosa? Possibile che sia l'unico che abbia esigenza di mappare esternamente utenti,gruppi e ruoli? Ho pensato di: 1) fare una replica di utenti e gruppi AD in un LDAP su localhost, in modo almeno da segare via l'overhead della rete e non massacrare oltre il server M$ La sincro tra AD ed OpenLDAP non è banale, più agevole risulterebbe con il 389 Directory Server di RedHat, ma uso debian... quindi mi devo anche sbattere per fare il pacchetto oltre che impararne il funzionamento (ho sempre usato OpenLDAP). 2) In alternativa mi costruisco a mano uno script Python che ogni TOT mi faccia il sync tra AD e OpenLDAP. Si può fare, ci sono alcuni spunti in rete (OpenXchange, GoogleSync ... ) ma sicuramente non me la cavo in 60 minuti di lavoro. Poi lo script è da mantenere... In questo caso però potrei leggere da AD e scrivere direttamente su Zope saltando LDAP, ma devo sapere bene cosa scrivere e dove in Zope/Plone. Lo sfasamento temporale dei dati dovuto alle sync periodiche sarebbe tollerabile. 3) Patchare Products.PloneLDAP e tutto lo stack sotto per rendere efficace la cache, ma devo sapere bene cosa scrivere e dove nei relativi pacchetti. Insomma... da dove devo iniziare per farmi del male? Buon fine settimana. -- Michele Mordenti _______________________________________________ Plone-IT mailing list [email protected] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html
