1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-23 23:12:09 +01:00
Files
archived-doc-es/features/http-auth.xml

139 lines
5.0 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: cd4180557a185469a64a7eb26f7be98d0a5f1ebb Maintainer: PhilDaiguille 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>Identificación HTTP con PHP</title>
<simpara>
Es posible utilizar la función <function>header</function> para solicitar
una identificación (<literal>"Authentication Required"</literal>) al cliente,
generando así la aparición de una ventana
de solicitud de usuario y contraseña. Una vez que los
campos han sido completados, la URL será llamada de nuevo, con las <link linkend="reserved.variables">variables predefinidas</link>
<varname>PHP_AUTH_USER</varname>, <varname>PHP_AUTH_PW</varname> y
<varname>AUTH_TYPE</varname> conteniendo respectivamente el nombre de usuario, la contraseña y
el tipo de identificación. Estas variables predefinidas se encuentran en los arrays
<varname>$_SERVER</varname>.
<emphasis>Solo</emphasis> el método de identificación "Basic"
es soportado. Consulte la función
<function>header</function> para más información.
</simpara>
<para>
Aquí hay un ejemplo de script que fuerza la identificación del cliente
para acceder a una página:
</para>
<para>
<example>
<title>Ejemplo de identificación 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 'Texto utilizado si el visitante usa el botón de cancelación';
exit;
} else {
echo "<p>Hola, {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Su contraseña es {$_SERVER['PHP_AUTH_PW']}.</p>";
}
?>
]]>
</programlisting>
</example>
</para>
<note>
<title>Compatibilidad</title>
<para>
Sea muy cuidadoso al usar encabezados HTTP con PHP. Para
garantizar la máxima compatibilidad entre los navegadores, la palabra clave
"Basic" debe escribirse con una B mayúscula, y el texto de presentación
debe colocarse entre comillas dobles (no simples), y exactamente un espacio debe
preceder al código <emphasis>401</emphasis> en el encabezado
<emphasis>HTTP/1.1 401</emphasis>. Los parámetros de autenticación deben
estar separados por comas.
</para>
</note>
<para>
En lugar de mostrar simplemente las variables globales <varname>PHP_AUTH_USER</varname>
y <varname>PHP_AUTH_PW</varname>, se preferirá
verificar la validez del nombre de usuario y la contraseña.
Por ejemplo, enviando esta información a una base de datos,
o buscando en un fichero dbm.
</para>
<note>
<title>Configuración de Apache</title>
<para>
PHP utiliza la presencia de la directiva <literal>AuthType</literal>
para determinar si una identificación externa está activada.
</para>
</note>
<simpara>
Tenga en cuenta, sin embargo, que las manipulaciones anteriores no impiden
que cualquier persona con una página no identificada
robe las contraseñas de las páginas protegidas,
en el mismo servidor.
</simpara>
<note>
<title>Comportamiento del navegador</title>
<simpara>
La autenticación HTTP Basic es realmente básica, y no fue diseñada para
soportar cierres de sesión. Dado que HTTP es un protocolo sin estado, la mayoría
de los navegadores almacenarán en caché las credenciales proporcionadas tan pronto como
se reciba un código de estado <literal>2xx</literal>, y las enviarán en cada solicitud,
hasta que se cierre el navegador. No existe una forma definida para que un servidor
solicite nuevas credenciales.
A lo largo de los años, varias soluciones alternativas se han difundido como consejos
en Internet, pero todas dependen de cómo los diferentes navegadores han elegido
manejar casos límite no definidos (o incluso violaciones del estándar HTTP).
Es mejor evitar tales soluciones alternativas y no utilizar la autenticación Basic
para nada serio.
</simpara>
</note>
<note>
<title>Configuración de IIS</title>
<simpara>
Para que la identificación HTTP funcione con un servidor IIS con
la versión CGI de PHP, la directiva PHP
<link linkend="ini.cgi.rfc2616-headers">cgi.rfc2616_headers</link>
debe establecerse en <literal>0</literal> (el valor por defecto),
y debe editar la configuración "<literal>Directory Security</literal>"
de IIS. Haga clic en "<literal>Edit</literal>" y active solo
"<literal>Anonymous Access</literal>", todos los demás campos deben
dejarse inactivos.
</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
-->