<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'features.http-auth.php',
    1 => 'Identification HTTP avec PHP',
    2 => 'Identification HTTP avec PHP',
  ),
  'up' => 
  array (
    0 => 'features.php',
    1 => 'Caract&eacute;ristiques',
  ),
  'prev' => 
  array (
    0 => 'features.php',
    1 => 'Caract&eacute;ristiques',
  ),
  'next' => 
  array (
    0 => 'features.cookies.php',
    1 => 'Cookies',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'features/http-auth.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.http-auth" class="chapter">
 <h1 class="title">Identification HTTP avec PHP</h1>


 <p class="simpara">
  Il est possible d&#039;utiliser la fonction <span class="function"><a href="function.header.php" class="function">header()</a></span> pour demander
  une identification (<code class="literal">&quot;Authentication Required&quot;</code>) au client,
  générant ainsi l&#039;apparition d&#039;une fenêtre
  de demande d&#039;utilisateur et de mot de passe. Une fois que les
  champs ont été remplis, l&#039;URL sera de nouveau
  appelée, avec les <a href="reserved.variables.php" class="link">variables prédéfinies</a>
  <var class="varname">PHP_AUTH_USER</var>, <var class="varname">PHP_AUTH_PW</var> et
  <var class="varname">AUTH_TYPE</var> contenant respectivement le nom d&#039;utilisateur, le mot de passe et
  le type d&#039;identification. Ces variables prédéfinies sont trouvées dans les tableaux
  <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER</a></var>.
  <em>Seule</em> la méthode d&#039;identification simple (&quot;Basic&quot;)
  est supportée. Se reporter à la fonction
  <span class="function"><a href="function.header.php" class="function">header()</a></span> pour plus d&#039;informations.
 </p>

 <p class="para">
  Voici un exemple de script qui force l&#039;identification du client
  pour accéder à une page :
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Exemple #1 Exemple d&#039;identification HTTP simple</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if (!isset(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_USER'</span><span style="color: #007700">])) {<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'HTTP/1.1 401 Unauthorized'</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'WWW-Authenticate: Basic realm="My Realm"'</span><span style="color: #007700">);<br />    echo </span><span style="color: #DD0000">'Texte utilisé si le visiteur utilise le bouton d\'annulation'</span><span style="color: #007700">;<br />    exit;<br />} else {<br />    echo </span><span style="color: #DD0000">"&lt;p&gt;Bonjour, </span><span style="color: #007700">{</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_USER'</span><span style="color: #007700">]}</span><span style="color: #DD0000">.&lt;/p&gt;"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"&lt;p&gt;Votre mot de passe est </span><span style="color: #007700">{</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_PW'</span><span style="color: #007700">]}</span><span style="color: #DD0000">.&lt;/p&gt;"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <strong>Compatibilité</strong><br />
  <p class="para">
   Il faut être bien prudent lors de l&#039;utilisation d&#039;en-têtes HTTP avec PHP. Afin de
   garantir un maximum de compatibilité entre les navigateurs, le mot clé
   &quot;Basic&quot; 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 <em>401</em> dans l&#039;en-tête
   <em>HTTP/1.1 401</em>. Les paramètres d&#039;authentification doivent
   être séparés par des virgules.
  </p>
 </p></blockquote>

 <p class="para">
  Au lieu d&#039;afficher simplement les variables globales <var class="varname">PHP_AUTH_USER</var>
  et <var class="varname">PHP_AUTH_PW</var>, il est préférable de
  vérifier la validité du nom d&#039;utilisateur et du mot de passe.
  Par exemple, en envoyant ces informations à une base de données,
  ou en recherchant dans un fichier dbm.
 </p>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <strong>Configuration Apache</strong><br />
  <p class="para">
   PHP utilise la présence de la directive <code class="literal">AuthType</code>
   pour déterminer si une identification externe est activée.
  </p>
 </p></blockquote>

 <p class="simpara">
  Il est cependant à noter que les manipulations ci-dessus n&#039;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.
 </p>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <strong>Comportement des navigateurs</strong><br />
  <span class="simpara">
   L&#039;authentification HTTP Basic est vraiment basique, et n&#039;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&#039;un code de statut
   <code class="literal">2xx</code> est reçu, et les envoient à chaque requête, jusqu&#039;à la
   fermeture du navigateur. Il n&#039;existe pas de moyen défini pour qu&#039;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&#039;éviter ces solutions de
   contournement et de ne pas utiliser l&#039;authentification Basic pour quoi que
   ce soit de sérieux.
  </span>
 </p></blockquote>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <strong>Configuration IIS</strong><br />
  <span class="simpara">
   Afin de rendre fonctionnelle l&#039;authentification HTTP avec un serveur IIS avec
   la version CGI de PHP, la directive php.ini
   <a href="ini.core.php#ini.cgi.rfc2616-headers" class="link">cgi.rfc2616_headers</a>
   doit être définie à <code class="literal">0</code> (la valeur par défaut), et il faut
   éditer la configuration IIS &quot;<code class="literal">Directory Security</code>&quot;.
   Cliquer sur &quot;<code class="literal">Edit</code>&quot; et activer uniquement
   &quot;<code class="literal">Anonymous Access</code>&quot;, tous les autres champs doivent
   être laissés non actifs.
  </span>
 </p></blockquote>

</div>
<?php manual_footer($setup); ?>