Niveau :
Résumé : $_SERVER['PHP_AUTH_USER']
Il ne faut pas confondre authentification, identification et autorisation.
L'identification est le processus qui permet à une application de reconnaître une personne. Elle se fait en général par échange de login. Celui-ci peut être complété par la corrélation de ce login avec le contenu d'une base de données.
L'authentification c'est le fait de vérifier qu'une personne est bien celle qu'elle prétend être. C'est un processus qui se déroule en général par échange de mot de passe. Mais il est aussi possible d'authentifier une personne avec une carte à puce par exemple.
L'autorisation est le processus qui à partir de l'identification d'une personne dûment authentifiée donne des droits d'accès à une application ou à des données.
Chacune de ces tâches est bien distincte.
Dans le cas du système, l'identification est faite par nss, l'authentification par pam et l'autorisation par le noyau ou par l'application concernée.
Dans le cas du web, il est possible de tout faire faire par PHP ou de tout faire faire par apache.
Apache dispose d'un mécanisme standard d'authentification qui est intégré au protocole HTTP. Il dispose aussi naturellement de mécanismes d'autorisation d'accès en fonction des url accédées. Par contre l'identification dans apache n'est pas particulièrement utile et se résume donc à inclure le login dans les logs.
Php ne dispose pas naturellement de ces fonctions et donc les nombreuses applications qui suivent ce processus doivent tout redévelopper elles-mêmes. C'est une chose à éviter. Si c'est ce que vous faites, STOP ! vous êtes en train de recoder la roue. En l'absence de l'expérience accumulée sur les mécanismes spécialisés il est certain que les trous de sécurité et les erreurs s'accumulent dans votre application.
La solution est tout simplement de laisser apache faire l'authentification. Quitte à faire vous même l'autorisation en PHP si vous préférez. Pour cela rien de plus simple, modifiez le fichier .htaccess de votre racine.
AuthType Basic AuthName Authentification AuthUserFile /srv/http/site/htpassword Require valid-user
Et ensuite, vous avez le login disponible en php dans la variable $_SERVER['PHP_AUTH_USER']
Et si vous trouvez plus pratique de gérer vos utilisateurs dans une base sql, il y a mod_auth_mysql qui vous permettra de le faire.
Alors faites simple. Vous verrez l'avantage le jour où vous aurez besoin d'automatiser les accès à votre application, le jour où vous voudrez garantir une authentification commune à plusieurs applications, le jour ou vous voudrez changer de méthode d'authentification et surtout le jour où vous voudrez mettre en place un SSO (Single Sign On).
Comments