Bookmark and Share
Document Actions

PAS - Pluggable Authentication Service

Up one level
PAS è un componente che consente di integrare in modo trasparente l'autenticazione degli utenti attraverso diverse fonti tramite un sistema di plug-in.

Plone è un sistema potente e flessibile non solo come gestore di contenuti web ma anche per la gestione utenti. Plone memorizza tutti i suoi utenti dentro al Database Oggetto Zope (ZODB) in una lista utenti separata, potreste comunque aver bisogno di usare un altro servizio, come un database relazionale che gestisca le informazioni sugli utenti.

Grazie al sistema di autenticazione PAS (pluggable authentication service), potete usare altri servizi per autenticare i vostri utenti. Il sistema alternativo più comune è LDAP, di cui parleremo in questo capitolo. Naturalmente se non avete particolari esigenze, potete usare Plone così com'è, con i gruppi e gli utenti memorizzati nello ZODB. Si noti che non c'è bisogno di scrivere codice per integrare il vostro sito Plone con un'altra applicazione per la gestione degli utenti. Come vedrete in questo capitolo, vi basta solo installare il prodotto. A quel punto potrete configurare il vostro servizio per autenticare gli utenti direttamente da Plone senza trafficare con ZMI – tutto solo con un paio di click! Potete anche creare nuovi plug-in per usare metodi diversi per recuperare le informazioni sugli utenti. In questo capitolo, per prima cosa, introdurremo alcuni concetti base su come lavora il servizio di autenticazione. Dopo questo, vedremo com'è possibile unire Plone a LDAP o ad un database relazionale.

Attenzione: in questo capitolo giocheremo con le cartelle  acl_users dentro al sito Plone. Non dovete mai cancellare o alterare la cartella  acl_users nella radice della vostra istanza Zope. Se lo fate e le vostre cartelle utente dovessero rovinarsi per qualche ragione (cade il server, per esempio), tutto il vostro sito si bloccherà e non sarete più in grado di effettuare l'accesso neanche come amministratore. Quindi state attenti a cambiare solo le cartelle utente nel sito Plone!!

In ogni caso, se non riusciste più ad accendere al vostro sito Plone, non vi preoccupate, è possibile effettuare una piccola manovra di salvataggio. La pagina http://plone.org/documentation/faq/locked-out spiega come creare un nuovo utente senza avere un account amministratore per le versioni più recenti, per le versioni senza buildout e per le vecchie versioni di Zope.

Il PAS (Pluggable Authentication Service)

PAS è contenuto nel sistema di autenticazione utenti. Si occupa dell'autenticazione degli utenti, chiede all'utente se ha bisogno di accedere, vi permette di cercare utenti e gruppi, determina i gruppi a cui appartiene un utente, è responsabile di estrarre le credenziali dalle richieste e molte altre cose. Non è costruito come un unico servizio ma piuttosto è implementato da molti componenti, chiamati plug-in, che forniscono le interfacce richieste da PAS. I concetti dietro l'estrema modularità del PAS arrivano dalla Zope Component Architecture. Nel caso in cui non aveste familiarità con questa potente architettura, cominceremo con una breve introduzione sul concetto di interfacce in PAS. Di quale tipo di funzionalità ha bisogno PAS? Sicuramente ha bisogno almeno della funzionalità autenticazione, estrazione, funzionalità proprietà, e ruoli e gruppi di appartenenza, come vedremo in seguito. Per ogni funzionalità necessaria per PAS, ci sono uno o più plug-in, cioè piccoli componenti che forniscono le interfacce collegate ad una funzionalità specifica. L'interfaccia descrive la funzionalità di PAS, come l'interfaccia è un contratto tra due parti (l'infrastruttura PAS e i plug-in). In sostanza, il plug-in promette di fornire alcune funzionalità, e il sistema PAS sa come interagire con i plug-in grazie all'interfaccia.

Ora vi daremo una definizione un po' più tecnica di interfaccia: è una classe con una serie di dichiarazioni (attributi e metodi) che dev'essere implementata dall'oggetto che dichiara di fornire l'interfaccia. Quindi se avete un oggetto che fornisce un interfaccia, si suppone che questo oggetto lavori come specificato nell'interfaccia. Questo perché le interfacce sono comunemente indicate come contratti; troverete un concetto simile di interfaccia in Java. Quali sono i vantaggi? Come insegna l'architettura dei componenti Zope, avere componenti piccoli e semplici aiuta la leggibilità del codice, offrendo manutenibilità, e permettendo a tutti i componenti di essere testati al meglio. Le stesse considerazioni vengono applicate all'architettura di  PAS e dei plug-in. Ci sono uno o più componenti per la funzione di memorizzazione (cioè, dove gli utenti vengono memorizzati, come nello ZODB, LDAP, database relazionale, e così via), uno o più componenti per l'estrazione degli nomi utente (come si autenticano gli utenti), e così via. Per ogni funzionalità, potete registrare uno o più plug-in che forniscano questa caratteristica richiesta da PAS.

Perchè, potreste chiedervi, dobbiamo registrare uno o più plug-in per la stessa caratteristica? Risponderemo fornendo un semplice esempio. La caratteristica di estrazione permette a PAS di individuare come gli utenti si autenticano, estraendo le credenziali da una richiesta. Di default le credenziali vengono prese dai cookies HTTP, dati dei form d'accesso HTTP, o un'autenticazione base HTTP, ma potete usare altri metodi per autenticare utenti. Per esempio, se volete autenticare gli utenti tramite l'indirizzo IP, vi basta solo scrivere un plug-in PAS che fornisca l'interfaccia di estrazione e inserirlo. Il gioco è fatto!!! Avere uno o più plug-in per la stessa funzionalità vi permette di presentare agli utenti diversi metodi di autenticazione; PAS esegue i metodi di autenticazione nell'ordine da voi specificato, come i cookie HTTP, poi i dati dal form di login HTTP, poi un'utenticazione base HTTP, e così via. Situazioni come questa sono il motivo per cui Plone consente di utilizzare più plug-in per le stessa funzionalità.

PAS in Plone

Dove si trova PAS in Plone? Le nuove versioni di Plone forniscono di default delle cartelle utenti basate su PAS. Se avete una vecchia versione di Plone dovrete installare il prodotto PAS manualmente. In ogni caso potete trovare la cartella utenti basata su PAS andando nella ZMI e cliccando sullo strumento acl_users. (Come mostra la Figura 8-1)

strumento acl_users

Figura 8-1. Lo strumento acl_users  con cui potrete aggiungere e gestire gli account utente

Come abbiamo visto precedentemente, lo strumento acl_users ha molti tab; uno di questi è il tab Search che vi consente di cercare gli utenti con il loro ID o il nome d'accesso. Andate nella vista di default di acl_users e cliccate sull'icona corrispondente. Potete vedere numerose voci PAS in questo pannello. La voce più importante è Plugins, cioè il registro di tutti i plug-in. Per ogni funzionalità PAS, registrate le caratteristiche fornite da ogni plug-in e in quale ordine i plug-in vengono richiamati. Le altre voci che si possono vedere in acl-users, come  source_groups, source_users, e così via, sono tutti plug-in PAS. Ognuno di loro fornisce alcune funzionalità PAS, specificate in una particolare interfaccia.

Tipi di Plug-in

Ci sono molti altri tipi di plug-in, e ognuno di loro fornisce una funzione PAS, come l'aggiunta degli utenti, il loro conteggio, i ruoli e questioni locali, e così via, come accennato prima. Su ogni voce di questi plug-in, troverete una vista differente e molti tab di configurazione. Cliccate di nuovo sulla voce del plug-in nello strumento acl-users del vostro sito Plone; la Figura 8-2 mostra cosa si può trovare.

pannello Plugin Types

Figura 8-2. Il pannello Plugin Types, dove potete cliccare i diversi plug-in e configurarli.

Queste sono le interfacce più importanti che si consiglia di configurare:

  • Extraction Plugins:  responsabile dell'estrazione delle credenziali dalla richiesta.
  • Authentication Plugins: responsabile della validazione delle credenziali generate da extraction plugins
  • Groups Plugins: determina il gruppo a cui appartiene un utente.
  • Group_Enumeration Plugins: permette di cercare i gruppi dall'ID e implementa una ricerca logica per gruppi.
  • Properties Plugins: genera tabelle di proprietà per gli utenti.

Torniamo alla voce Plugin Types e ispezioniamo una funzionalità PAS. Ad esempio potete vedere quale plug-in fornisce una caratteristica e com'è configurato. Prendiamo in considerazione Extraction Plugins. Cliccate questa voce, e verrà visualizzato un pannello come quello nella Figura 8-3.

Extraction Plugins

Figura 8-3. Il pannello Extraction Plugins, in cui potete configurare i plug-in responsabili dell'estrazione delle credenziali dalle richieste.

Sulla sinistra trovate i plug-in disponibili, e sulla destra i plug-in abilitati che forniscono la funzionalità. Si noti l'ordine dei plug-in registrati poiché è l'ordine in cui i plug-in vengono richiamati. In questo caso, il box di sinistra è vuoto,e potete vedere tre plug-in registrati sulla destra di questo pannello, in quest'ordine:

  1. credentials_cookie_auth: è responsabile dell'estrazione delle credenziali degli utenti dai cookie HTTP (se usati) o dai form d'accesso o portlet d'accesso in Plone.
  2. credentials_basic_auth: se effettuate un'autenticazione HTTP basic da ZMI prima di entrare in Plone, credentials_basic_auth  gestirà l'estrazione.
  3. session: il plug-in session è configurato per usare un metodo di autenticazione basato su SHAI1 per che recupererà le credenziali dalla sessione.

Questa è la successione di Extraction Plugins predefinita.

Gestire gli utenti tramite lo strumento acl_users

Ora ritornate allo strumento acl_users e cliccate su un plug-in di cui abbiamo appena parlato; per esempio, cliccate sul plug-in  credentials_cookie_auth (la Figura 8-4 mostra ciò che si ottiene).

credentials_cookie_auth

Figura 8-4. Il pannello di credentials_cookie_auth, in cui potete scegliere la funzionalità che deve svolgere.

Qui vedrete alcune tab. Le schede possono cambiare di plug-in in plug-in. Per esempio, con alcuni plug-in vedrete la scheda Properties che vi permette di configurare un plug-in. Un altro plug-in potrebbe non avere tale scheda. Una scheda obbligatoria per tutti i plug-in è Activate, che è la vista di configurazione in cui potete abilitare o disabilitare la funzionalità che il plug-in deve fornire. Avete visto il ruolo del registro dei plug-in e come i componenti sono collegati tra loro. Ora parleremo dei plug-in importanti qui sotto riportati:

  •  source_users
  •  source_groups
  •  portal_role_manager

Questi plug-in sono responsabili della memorizzazione degli utenti e dei gruppi nello ZODB (Zope Object Database ) di default in Plone; per esempio, potete anche cambiare password e ruoli per un particolare utente andando rispettivamente nei plug-in source_users e portal_role_manager.

Nota: dovreste sempre gestire gli utenti e i gruppi usando l'interfaccia Plone dove possibile, come abbiamo già visto. I prossimi esempi sono utili solo se lavorate fuori da Plone. Se avete particolari richieste che vi obbligano a fare qualcosa di diverso o siete curioso di capire come gli utenti Plone, i gruppi, e la gestione dei ruoli lavorano “dietro le quinte”, segui i prossimi esempi per scoprire di più sullo strumento acl_users e i plug-in base di PAS.

Se cliccate sul plug-in source_groups, troverete una lista di gruppi sul vostro sito Plone. Nella sezione “Current Groups”, potete aggiungere nuovi gruppi (o cancellarne di esistenti) e assegnare utenti a gruppi esistenti. Se vi spostate nella sezione source_users, troverete la lista degli utenti registrati sul sito. Questa lista è vuota quando cominciate con un sito nuovo o quando gli utenti vengono gestiti da altri plug-in, ma in genere è qua che potete gestire i vostri utenti. Potete aggiungere o cancellare utenti, cambiare i nomi d'accesso, e cambiare le password. Se volete creare un nuovo utente, potete cliccare il link “Add User”, compilare i campi del form per l'aggiunta dell'utente e confermare cliccando il pulsante Add User, come abbiamo appena visto nel capitolo 7. Nell'esempio viene aggiunto un utente chiamato John, come mostra la Figura 8-5.

plug-in source_users

Figura 8-5. Il plug-in source_users, dopo aver appena aggiunto un nuovo utente chiamato John.

Ora, se volete, potete cancellare questo nuovo utente selezionandolo e cliccando sul pulsante Remove Users. Potete cambiare il nome d'accesso cliccando sull'ID utente, e potete cambiare la password per questo utente cliccando su Password. Supponete di voler assegnare all'utente John il ruolo di manager. Dovete cliccare il plug-in portal_role_manager. Dopo averlo fatto vedrete una lista dei ruoli esistenti e assegnati. In questo caso, cliccate su manager, cercate l'utente chiamato John e assegnate a questo utente il ruolo di manager. A questo punto, John verrà considerato un manager (per una spiegazione più completa rivedete i capitoli precedenti sui permessi). Ora mostreremo un esempio più pratico. Avete visto che ogni "sorgente" PAS ha uno o più plug-in che implementano l'interfaccia. Ora potete creare una nuova "sorgente" per utenti e giocare con le impostazioni PAS al fine di avere più di un utente amministratore. In questo modo comincereste ad interagire con le impostazioni PAS; fatto ciò, sarete in grado di applicare queste configurazioni quando dovrete configurare LDAP o gli utenti su una "sorgente" attraverso SQL.

Andate allo strumento acl_users del vostro sito Plone, e dal menu a tendina Add selezionate ZODB User Manager. Compilate il form con un ID come source_myusers, e confermate la decisione cliccando sul pulsante Add. Andate alla nuova sorgente e cliccate il tab Activate. Qui troverete queste opzioni, tutte deselezionate:

  • Authentication: selezionate questa opzione per permettere agli utenti di questa sorgente di autenticarsi.
  • User_Adder: selezionate questa opzione per abilitare questa sorgente a permettere l'inserimento di un nuovo utente
  • User_Enumeration: selezionate questa opzione per consentire il censimento o la ricerca per gli utenti contenuti in questa sorgente

Giocando con queste tre opzioni e configurando l'ordine dei plug-in, sarete in grado di implementare alcuni interessanti casi d'uso.

Gli utenti non compariranno nei risultati di ricerca

Volete usare questa nuova sorgente per aggiungere utenti che per qualche ragione non volete far comparire nei risultati delle ricerche? (In altre parole, volete fare in modo che non sia possibile trovare questi utenti nel pannello di condivisione o nell'area gestione utenti nel pannello di controllo di Plone?)

Se è così, selezionate le opzioni Authentication e User_Adder, e cliccate il pulsante Update, mantenete l'opzione User Enumeration deselezionata. Poi cliccate il link Authentication e mettete la nuova sorgente in cima ai plug-in abilitati. Ora, i nuovi utenti saranno creati automaticamente nella vostra sorgente degli utenti perché questa prevale, e non appariranno nelle ricerche utenti. Se andate sul pannello di controllo di Plone e aggiungete un nuovo utente, verrà creato in questa sorgente, ma non apparirà nel censimento utenti. Questo può essere utile per gestire un forum in cui molti utenti si registreranno per aggiungere commenti e partecipare alle discussioni ma non è necessario contarli nei risultati di ricerca; basta cercare e assegnare le autorizzazioni agli amministratori del sito.

Utenti che possono essere cercati ma non autenticati

Volete impostare la vostra nuova sorgente di utenti in modo che gli utenti contenuti in essa siano disponibili per le ricerche? In altre parole, volete autenticarli? Selezionate solo l'opzione  User_Enumeration, e confermate cliccando il pulsante Update. Gli utenti contenuti in questa sorgente saranno disponibili come risultati di ricerca o altre liste ma non saranno in grado di autenticarsi. Questo può essere utile per i siti il cui contenuto è stato scritto da un fornitore esterno. In questo modo, gli autori (che saranno registrati nella sorgente che state gestendo) diventeranno disponibili per le ricerche e rispetteremo le loro proprietà intellettuali, ma questi utenti non potranno autenticarsi, perché non ci sarà nessuna ragione per farlo.

Nessun altro utente verrà creato da questa sorgente

Volete collegare in Plone una sorgente diversa per permettere agli utenti di autenticarsi ma non volete permettere a nessuno di creare nuovi utenti in questa sorgente? In questo caso, selezionate le opzioni  Authentication e User_Enumeration, e confermate cliccando sul pulsante Update. I nuovi utenti verranno creati nella sorgente predefinita degli utenti. Questa configurazione è molto comune con le source esterne basata su LDAP o SQL. Per esempio, quando in Plone collegate una sorgente esterna per gli utenti come LDAP o un database relazionale, deselezionare l'opzione User_Adder è comune. L'aggiunta di un utente LDAP è gestita usando un altro strumento in modo da avere un unico strumento di gestione. E' possibile combinare tutti questi casi d'uso, ma dipende dalle vostre necessità.

Nota: potete facilmente importare e reimportare la vostra sorgente con tutti gli utenti registrati con lo strumento di import/export zexp disponibile nella ZMI.

by Dario Pollino last modified 2010-03-19 16:39
Contributors: Maurizio Delmonte, Davide Moro, Alice Narduzzo, Fabrizio Reale, Enrico Barra, Andrea Cannizzaro, Andrea D'Este, Maurizio Lupo, Giuseppe Masili, Dario Pollino, Matteo Sorba.