1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-24 07:02:06 +01:00
Files
archived-doc-fr/features/http-auth.xml
2026-03-07 20:51:31 +01:00

141 lines
5.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: cd4180557a185469a64a7eb26f7be98d0a5f1ebb Maintainer: lacatoire Status: ready -->
<!-- Reviewed: yes -->
<chapter xml:id="features.http-auth" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Identification HTTP avec PHP</title>
<simpara>
Il est possible d'utiliser la fonction <function>header</function> pour demander
une identification (<literal>"Authentication Required"</literal>) au client,
générant ainsi l'apparition d'une fenêtre
de demande d'utilisateur et de mot de passe. Une fois que les
champs ont été remplis, l'URL sera de nouveau
appelée, avec les <link linkend="reserved.variables">variables prédéfinies</link>
<varname>PHP_AUTH_USER</varname>, <varname>PHP_AUTH_PW</varname> et
<varname>AUTH_TYPE</varname> contenant respectivement le nom d'utilisateur, le mot de passe et
le type d'identification. Ces variables prédéfinies sont trouvées dans les tableaux
<varname>$_SERVER</varname>.
<emphasis>Seule</emphasis> la méthode d'identification simple ("Basic")
est supportée. Se reporter à la fonction
<function>header</function> pour plus d'informations.
</simpara>
<para>
Voici un exemple de script qui force l'identification du client
pour accéder à une page :
</para>
<para>
<example>
<title>Exemple d'identification HTTP simple</title>
<programlisting role="php">
<![CDATA[
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="My Realm"');
echo 'Texte utilisé si le visiteur utilise le bouton d\'annulation';
exit;
} else {
echo "<p>Bonjour, {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Votre mot de passe est {$_SERVER['PHP_AUTH_PW']}.</p>";
}
?>
]]>
</programlisting>
</example>
</para>
<note>
<title>Compatibilité</title>
<para>
Il faut être bien prudent lors de l'utilisation d'en-têtes HTTP avec PHP. Afin de
garantir un maximum de compatibilité entre les navigateurs, le mot clé
"Basic" doit être écrit avec un B majuscule, et le texte de présentation
doit être placé entre doubles guillemets (pas des simples), et exactement un espace doit
précéder le code <emphasis>401</emphasis> dans l'en-tête
<emphasis>HTTP/1.1 401</emphasis>. Les paramètres d'authentification doivent
être séparés par des virgules.
</para>
</note>
<para>
Au lieu d'afficher simplement les variables globales <varname>PHP_AUTH_USER</varname>
et <varname>PHP_AUTH_PW</varname>, il est préférable de
vérifier la validité du nom d'utilisateur et du mot de passe.
Par exemple, en envoyant ces informations à une base de données,
ou en recherchant dans un fichier dbm.
</para>
<note>
<title>Configuration Apache</title>
<para>
PHP utilise la présence de la directive <literal>AuthType</literal>
pour déterminer si une identification externe est activée.
</para>
</note>
<simpara>
Notez cependant que les manipulations ci-dessus n'empêchent
pas quiconque possède une page non identifiée
de voler les mots de passe des pages protégées,
sur le même serveur.
</simpara>
<note>
<title>Comportement des navigateurs</title>
<simpara>
L'authentification HTTP Basic est vraiment basique, et n'a pas été conçue pour
gérer les déconnexions. HTTP étant un protocole sans état, la plupart des
navigateurs mettent en cache les identifiants fournis dès qu'un code de statut
<literal>2xx</literal> est reçu, et les envoient à chaque requête, jusqu'à la
fermeture du navigateur. Il n'existe pas de moyen défini pour qu'un serveur
demande une nouvelle saisie des identifiants.
Au fil des années, diverses solutions de contournement se sont répandues sur
internet, mais elles dépendent toutes de la manière dont les différents
navigateurs ont choisi de gérer des cas limites non définis (voire des
violations du standard HTTP). Il est préférable d'éviter ces solutions de
contournement et de ne pas utiliser l'authentification Basic pour quoi que
ce soit de sérieux.
</simpara>
</note>
<note>
<title>Configuration IIS</title>
<simpara>
Afin de rendre fonctionnelle l'authentification HTTP avec un serveur IIS avec
la version CGI de PHP, la directive php.ini
<link linkend="ini.cgi.rfc2616-headers">cgi.rfc2616_headers</link>
doit être définie à <literal>0</literal> (la valeur par défaut), et il faut
éditer la configuration IIS "<literal>Directory Security</literal>".
Cliquer sur "<literal>Edit</literal>" et activer uniquement
"<literal>Anonymous Access</literal>", tous les autres champs doivent
être laissés non actifs.
</simpara>
</note>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->