Authentification avec une table de base de donnéesIntroductionZend_Auth_Adapter_DbTable fournit la possibilité d'authentifier sur la base de crédits stockés dans une table de base de données. Comme Zend_Auth_Adapter_DbTable requiert qu'une instance de Zend_Db_Adapter_Abstract soit fournie à son constructeur, chaque instance est liée à une connexion de base de données particulière. Les autres options de configuration peuvent être réglées grâce au constructeur ou au travers de différentes méthodes, une pour chaque option. Les options de configuration disponibles incluent :
Example #1 Utilisation basique Comme expliqué dans l'introduction, le constructeur de Zend_Auth_Adapter_DbTable requiert une instance de Zend_Db_Adapter_Abstract qui est utilisée comme connexion à la base de données à laquelle l'instance d'adaptateur d'authentification est liée. Avant tout, la connexion à la base de donnée devrait être crée. Le code suivant crée un adaptateur pour une base de données en mémoire, crée un schéma avec une table unique, et insère une ligne sur laquelle nous pouvons réaliser une requête d'authentification plus tard. Cet exemple requiert que l'extension PDO SQLite soit disponible :
Avec une connexion de base de données et des données disponibles dans la table, une instance de Zend_Auth_Adapter_DbTable peut être créée. Les valeurs d'options de configuration peuvent être fournies au constructeur ou en tant que paramètres aux méthodes de réglage après l'instanciation :
A cet instant, l'instance de l'adaptateur d'authentification est prête à recevoir des requêtes d'authentification. Dans le but de réaliser une requête d'authentification, les valeurs des crédits requêtés sont fournies à l'adaptateur avant d'appeler la méthode authenticate() :
En plus de la disponibilité de la méthode getIdentity() pour récupérer l'objet du résultat d'authentification, Zend_Auth_Adapter_DbTable supporte aussi la récupération de la ligne de la table qui a réussi l'authentification : Puisque la ligne de la table contient la valeur de crédit, il est important de garantir ces valeurs contre l'accès fortuit. Utilisation avancée : maintenir persistant l'objet de résultat DbTablePar défaut, Zend_Auth_Adapter_DbTable retourne l'identité fournie à l'objet Auth en cas d'authentification couronnée de succès. Un autre scénario d'utilisation, où les développeurs veulent stocker dans le mécanisme de stockage persistant du Zend_Auth un objet d'identité contenant d'autres informations utiles, est résolu en utilisant la méthode getResultRowObject() retournant un objet stdClass. Le petit bout de code suivant illustre cette utilisation :
Utilisation avancée par l'exempleBien que le but initial de Zend_Auth (et par extension celui de Zend_Auth_Adapter_DbTable) est principalement l'authentification et non l'autorisation (ou contrôle d'accès), il existe quelques exemples et problèmes qui franchissent la limite des domaines auxquels ils appartiennent. Selon la façon dont vous avez décidé d'expliquer votre problème, il semble parfois raisonnable de résoudre ce qui pourrait ressembler à un problème d'autorisation dans l'adaptateur d'authentification. Ceci étant dit, Zend_Auth_Adapter_DbTable possède des mécanismes qui sont construits de telle sorte qu'ils peuvent être démultipliés pour ajouter des contrôles supplémentaires au moment de l'authentification pour résoudre quelques problèmes communs d'utilisateur.
Un autre scénario possible est l'implantation d'un mécanisme de "salting". "Salting" est un terme se référant une technique qui peut fortement améliorer la sécurité de votre application. C'est basé sur l'idée que concaténer une chaîne aléatoire à tout mot de passe rend impossible la réussite d'une attaque de type "brute force" sur la base de données en utilisant des valeurs préalablement hashées issues d'un dictionnaire. Par conséquent nous devons modifier notre table pour stocker notre chaîne de "salt" aléatoire :
Voici une méthode simple pour générer une chaîne aléatoire pour chaque utilisateur à leur enregistrement : Et maintenant, construisons l'adaptateur :
Une autre alternative est d'utiliser la méthode getDbSelect() de la classe Zend_Auth_Adapter_DbTable après la construction de l'adaptateur. Cette méthode retournera une instance d'objet Zend_Db_Select utilisée pour réaliser la routine authenticate(). Il est important de noter que cette méthode retournera toujours le même objet, que la méthode authenticate() a été appelée ou non. Cet objet ne comportera aucune information d'identité ou de crédit puisque celles-ci sont placées dans l'objet select au moment de authenticate(). Un exemple de situation nécessitant l'utilisation de la méthode getDbSelect() serait de vérifier le statut d'un utilisateur, en d'autres termes pour voir si le compte d'un utilisateur est activé.
|