Autenticare gli utenti con Zend_Auth - 1

Architettura di Zend_Auth

Zend_Auth è la classe principale del sistema di gestione dell'autenticazione utente dello Zend Framework. In una applicazione può esistere un solo oggetto Zend_Auth, infatti la classe implementa il Singleton pattern. Non è necessario quindi istanziare direttamente questa classe ma, quando se ne ha bisogno, basta usare Zend_Auth::getInstance() per accedere all'unica istanza, anche se nulla vieta di assegnare tale istanza ad una variabile.

Come anticipato lo Zend_Auth non è un componente monolitico ma si affida a due ulteriori classi per realizzare due importanti compiti: la verifica delle credenziali e la persistenza dell'identità dell'utente riconosciuto. La verifica delle credenziali viene realizzata da una classe detta Zend_Auth Adapter. Ciascun Adapter è dedicato ad un particolare meccanismo di autenticazione. Quelli già presenti nello Zend Framework sono:

  • Zend_Auth_Adapter_DbTable, in grado di autenticare un utente verificando le sue credenziali (username e password) all'interno di una tabella di un database.
  • Zend_Auth_Adapter_Digest, che utilizza il sistema di autenticazione nativo dell'HTTP basato sulla richiesta di nome e password (crittografata con un sistema basato su MD5)
  • Zend_Auth_Adapter_Http, un sistema che implementa quasi completamente l'autenticazione HTTP, con invio di password sia in chiaro che attraverso digest.

Se nessuno di questi Adapter fa al caso nostro, possiamo scriverne uno personalizzato, creando una classe che implementi l'interfaccia Zend_Auth_Adapter_Interface.

In generale un Adapter riceve in input le credenziali dell'utente, alcune informazioni per il setup del servizio di autenticazione (ad esempio nome della tabella del DB), e fornisce un metodo authenticate() per verificare l'identità dell'utente.

Indipendentemente dall'Adapter utilizzato, il suo metodo authenticate() restituisce un oggetto di tipo Zend_Auth_Result attraverso il quale è possibile conoscere l'esito dell'operazione, richiamando uno dei seguenti metodi:

isValid() - restituisce true se le credenziali dell'utente sono corrette

getCode() - restituisce un codice (una costante della classe Zend_Auth_Result) che permette di determinare non solo l'esito della validazione ma anche le cause di un eventuale insuccesso. Di seguito i valori possibili:

  • Zend_Auth_Result::SUCCESS: autenticazione effettuata con successo
  • Zend_Auth_Result::FAILURE: autenticazione fallita
  • Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND: username non trovato
  • Zend_Auth_Result::FAILURE_IDENTITY_AMBIGUOUS: trovati più risultati per l'username fornito
  • Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID: password errata
  • Zend_Auth_Result::FAILURE_UNCATEGORIZED: altro tipo di errore

getIdentity() - restituisce l'identità dell'utente utilizzata dura l'autenticazione. Generalmente si tratta dello username.

getMessages() - restituisce un array di messaggi di errore generati durante il processo di autenticazione.

Lo Zend_Auth Adapter si limita a verificare le credenziali ma non conserva il risultato dell'operazione. La persistenza dell'identità dell'utente riconosciuto viene affidata ad un ulteriore componente, lo Storage di Zend_Auth. Se non specificato diversamente si tratta dello Zend_Auth_Storage_Session, il quale utilizza Zend_Session (che a sua volta di default usa le sessioni di PHP). Anche in questo caso, come per l'Adapter, è possibile realizzare uno Storage personalizzato creando una classe che implementa l'interfaccia Zend_Auth_Storage_Interface. A differenza dello Zend_Auth Adapter che è necessario istanziare esplicitamente nel codice, lo Storage di Zend_Auth viene creato e gestito in maniera trasparente da Zend_Auth per cui nella maggior parte delle situazioni non dovremo preoccuparcene.

Effettua l'accesso o registrati per inserire un commento