Grummfy

Ou mon grand bazard présenté au public!

Rechercher

Divers

Site et domaine hébergé par OVH


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
= php_sapi_name();
if (stristr(, 'cgi'))
{
    echo 'Php est en mode cgi';
}
else
{
    echo 'Php est en mode : ' . ;
}
exit;
?>
Téléchargeable ici
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

// 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 />';

?>
Voila, il ne vous reste plus qu'as tester si l'utilisateur présent dans la base de donnée ou autre part.

En mode apache :
Il vous suffit de simplement utiliser le ficheir php suivant : <?php
// 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 />';
?>

Voila, il ne vous reste plus qu'as tester si l'utilisateur présent dans la base de donnée ou autre part.

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!