Authentification http et php
L'authentification http via php est une chose très pratique, par exemple, pour un flux rss.
Tout d'abord il vous faut déterminer si php est en mode cgi ou apache.
Pour ce faire, utiliser le code ci-dessous :
<?php
Téléchargeable ici
= php_sapi_name();
if (stristr(, 'cgi'))
{
echo 'Php est en mode cgi';
}
else
{
echo 'Php est en mode : ' . ;
}
exit;
?>
S'il est en mode cgi il vous faudra utiliser une réecriture de l'url vie le module rewrite de apache.
Dans le cas contraire tout devrait bien se passer.
En mode cgi :
Vous devez créer un fichier .htaccess ayant comme contenu
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%,L]
</IfModule>
Cela va nous permetre de récupérer dans $_SERVER['REMOTE_USER'] le login et le code d'authentification, mais légérement crypter.
Le fichier php :
<?php
Voila, il ne vous reste plus qu'as tester si l'utilisateur présent dans la base de donnée ou autre part.
// on test si $_SERVER['REMOTE_USER'] possède une valeur et si c'est bien de la forme "Basic loginpasswordcrypter="
if( (isset($_SERVER['REMOTE_USER']) && !empty($_SERVER['REMOTE_USER'])) &&
preg_match('/Basic+(.*)$/i', $_SERVER['REMOTE_USER'], $matches) )
{
// on obtient le login et le password sous la forme : user:password via
$identifiers = base64_decode($matches[1]);
// on l'exporte dans un tableau
$identifiers_tab = explode(':', $identifiers);
// on récupère le tout dans des variables
$PHP_AUTH_USER = strip_tags($identifiers_tab[0]);
$PHP_AUTH_PW = strip_tags($identifiers_tab[1]);
}
else
{
// rien ne doit être sorti avant ceci
// on demande de s'identifier avec le texte $my_message
// il est conseiller, pour une compatibiliter avec les différents navigateur de mettre des " et non des ' autour du message
$my_message = "Taper n'importe quoi c'est bon";
header('WWW-Authenticate: Basic realm="' . $my_message . '"');
header('HTTP/1.0 401 Unauthorized');
// en cas d'annulation
echo 'Tss j'ai demander de taper quelque chose!!!!!';
exit;
}
// l'authentification est réussie
echo "login: $PHP_AUTH_USER" . '<br />';
echo "password: $PHP_AUTH_PW" . '<br />';
?>
En mode apache :
Il vous suffit de simplement utiliser le ficheir php suivant :
<?php
Voila, il ne vous reste plus qu'as tester si l'utilisateur présent dans la base de donnée ou autre part.
// on test si $_SERVER['PHP_AUTH_USER'] et si $_SERVER['PHP_AUTH_PW'] possède une valeur
// si c'est le cas on peux tester le login et le apssword
if ( (isset($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']) && !empty($_SERVER['PHP_AUTH_PW'])))
{
// on récupère le tout dans des variables
$PHP_AUTH_USER = strip_tags($_SERVER['PHP_AUTH_USER']);
$PHP_AUTH_PW = strip_tags($_SERVER['PHP_AUTH_PW']);
else
{
// rien ne doit être sorti avant ceci
// on demande de s'identifier avec le texte $my_message
// il est conseiller, pour une compatibiliter avec les différents navigateur de mettre des " et non des ' autour du message
$my_message = "Taper n'importe quoi c'est bon";
header('WWW-Authenticate: Basic realm="' . $my_message . '"');
header('HTTP/1.0 401 Unauthorized');
// en cas d'annulation
echo 'Tss j'ai demander de taper quelque chose!!!!!';
exit;
}
// l'authentification est réussie
echo "login: $PHP_AUTH_USER" . '<br />';
echo "password: $PHP_AUTH_PW" . '<br />';
?>
Pour ceux qui le désire j'ai réaliser une petite class php : Explication de ce coté
Les scripts présent ici sont téléchargable.
Bonne continuation.
Des commentaires : rendez-vous sur le forum!