OVH Community, votre nouvel espace communautaire.

Comment utiliser l'authentification HTTP en PHP chez OVH


Yukulélé
10/02/2011, 17h21
ça ne marche pas !!!

Je suis sur un hébergement PERSO, ça ne marche plus pour les nouveau hébergement OVH mutualisés ?!?

j'ai mis
Code:
RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
dans mon .htaccess
une variable $_SERVER["REMOTE_USER"] est bien créé mais elle est vide !!!

bosco
06/02/2009, 18h20
Apache > fermeture de page normalement
autrement, c'est toi qui le gère.

forum-vista
06/02/2009, 18h09
Et comment on déconnecte l'utilisateur ?

frob
20/10/2005, 06h45
Dans ce cas, ton "authentification" MySQL a juste besoin du nom d'utilisateur, puisque celui-ci a déjà été authentifié par Apache (ce qui prouve simplement qu'il a saisi le bon mot de passe).
Mais peut-être ai-je mal compris ce que tu veux réellement faire ?

RG1651-OVH
18/10/2005, 17h17
Je voudrais faire une securisation par la sécurité APACHE (htaccess) ET par la base MySQL notamment en limitant l'accès à certaines tables en fonction du profil de l'utilisateur, et ceci sans demander une deuxième fois le User/Password.

frob
18/10/2005, 16h09
Finalement, le plus important n'est-il pas de récupérer le nom d'utilisateur ?
Le mot de passe n'a ici que peu d'intérêt, dans la mesure où l'utilisateur est déjà authentifié (en d'autres termes on est certain qu'il a saisi le mot de passe correspondant à son nom d'utilisateur).

RG1651-OVH
11/10/2005, 13h17
Merci frob de ta réponse, nous avons donc le même problème ...

Qui pourrait nous aider ???

frob
10/10/2005, 16h55
A condition d'avoir rajouté la directive dans .htaccess,
le simple script suivant semble fonctionner :

echo "*".$_SERVER['REMOTE_USER']."*";
?>

Contrairement à ce qui a été dit plus haut, la variable $_SERVER['REMOTE_USER'] contient juste le nom de l'utilisateur, sans qu'il y ait besoin de décoder quoi que ce soit.
Par contre, je ne suis pas parvenu à récupérer le mot de passe (sous forme codée ou non)

NB : L'hébergement est un 300gp

RG1651-OVH
26/09/2005, 22h00
PHP_AUTH_USER et PHP_AUTH_USER sont encore vide ?

j'ai lu
référence yetanothercommunitysystem

et aussi OVH "PHP_AUTH_USER"

Cette directive dit que, si le module mod_rewrite est disponible, houai et si pas là alors ??



RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]

AuthUserFile /home/toutlere/secret/.htpasswd
AuthGroupFile /dev/null
AuthName "Accès Restreint"
AuthType Basic


require valid-user

Code PHP:



  






// maybe we have caught authentication data in $_SERVER['REMOTE_USER'] -- see trick explained above

echo "==>[" $_SERVER['REMOTE_USER'] . "]\n";

if((!isset(
$_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_USER']) )
    && 
preg_match('/Basic\s+(.*)$/i'$_SERVER['REMOTE_USER'], $matches)) {
    list(
$name$password) = explode(':'base64_decode($matches[1]));
    
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
    
$_SERVER['PHP_AUTH_PW']    = strip_tags($password);
}


echo 
"[" $_SERVER['PHP_AUTH_USER'] . "]\n";
echo 
"[" $_SERVER['PHP_AUTH_PW'] . "]\n";


if (!isset(
$_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_USER']))
{
header'WWW-Authenticate: Basic realm="Private"' );
header'HTTP/1.0 401 Unauthorized' );
echo 
'Authorization Required.';
exit;
}
else
 {
echo 
"You entered " $_SERVER['PHP_AUTH_USER'] . " for a username.
"
;
echo 
"You entered " $_SERVER['PHP_AUTH_PW'] . " for a password.
"
;
}

?>


Merci d'avance.

beepee357
04/10/2004, 18h14
Pourquoi avons-nous besoin d'authentification dynamique ?

Par exemple, pour contrôler l'accès à un feed RSS sensible. Supposons que vous auriez un serveur web capable de lister les événements de sa log système, et de diffuser ce genre d'information par un feed RSS, ce qui est probablement un excellent moyen de monitorer un ou plusieurs sites. Encore faut-il vérifier qui accède à ces feeds.

Plusieurs newsreaders (au moins RSS Bandit et FeedReader) supportent l'authentification HTTP, et donc nous nous sommes tournés naturellement vers cette solution

Le principal problème, c'est qu'on aimerait bien ne pas se taper une reconfiguration du .htaccess statique à chaque fois qu'un mot de passe change ou est ajouté. L'idéal, c'est de laisser PHP s'occuper de contrôler les profils utilisateurs dans la base de données MySQL.

D'après la documentation PHP, il suffit juste de regarder deux variables pour retrouver le nom et le mot de passe de l'usager distant.

Malheureusement, ces deux variables sont toujours vides lorsque PHP tourne en mode CGI. Devinez quoi ? C'est justement dans ce mode qu'OVH abrite les sites mutualisés...

Fallait-il changer de fournisseur ou renoncer à nos projets ?

Que nenni ! Nous avons simplement trouvé un autre moyen de retrouver les informations de sécurité dans PHP. En fait, la seule chose dont vous avez vraiment besoin est le module Apache mod_rewrite Apache module, et la possibilité d'ajouter quelques directives au fichier .htaccess.

La solution est de sélectionner une variable Apache qui est effectivement transmise à PHP même en mode CGI, et d'y coller les données d'authentification transmises par le navigateur (ou par le newsreader).

Que faut-il mettre dans .htaccess ?

Jetez un coup d'oeil à la directive ajoutée au fichier .htaccess:

Code:

	RewriteEngine on
	RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
Cette directive dit que, si le module mod_rewrite est disponible, L'attribut HTTP Authorization doit être placé dans la variable $_SERVER['REMOTE_USER'].

Que faut-il mettre dans le script PHP ?

L'objectif, c'est de faire un script qui marche partout, que PHP s'exécute comme un module Apache, ou en mode CGI.

Avant d'utiliser $_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PW'], vérifier si ces variables sont vides.

Si oui, essayer de les reconstituer à partir de $_SERVER['REMOTE_USER'].

L'extrait de code qui suit fait exactement cela :

Code PHP:
// maybe we have caught authentication data in $_SERVER['REMOTE_USER']
if((!$_SERVER['PHP_AUTH_USER'] || !$_SERVER['PHP_AUTH_USER'])
    && 
preg_match('/Basics+(.*)$/i'$_SERVER['REMOTE_USER'], $matches)) {
    list(
$name$password) = explode(':'base64_decode($matches[1]));
    
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
    
$_SERVER['PHP_AUTH_PW']    = strip_tags($password);
}
?>
Plus d'info ?

Un descriptif plus complet de la solution est disponible ici, ainsi que le script PHP complet.