1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20763 -->
4 <sect1 id="zend.auth.adapter.http">
6 <title>Adaptador de Autenticación HTTP</title>
8 <sect2 id="zend.auth.adapter.http.introduction">
10 <title>Introducción</title>
13 <classname>Zend_Auth_Adapter_Http</classname>
15 implementación compatible con
16 <ulink url="http://tools.ietf.org/html/rfc2617">RFC-2617</ulink>
18 <ulink url="http://en.wikipedia.org/wiki/Basic_authentication_scheme">Basic</ulink>
20 <ulink url="http://en.wikipedia.org/wiki/Digest_access_authentication">Digest</ulink>
22 <acronym>HTTP</acronym>
24 autenticación "Digest" es un método de autenticación
25 <acronym>HTTP</acronym>
26 que mejora la autenticación básica
27 proporcionando una manera de autenticar sin tener que
29 contraseña de manera clara en un texto a través de la red.
33 <emphasis role="strong">Características Principales:</emphasis>
38 <para>Soporta tanto Autenticación "Digest" como Básica.</para>
41 <para>Establece retos en todos los proyectos soportados, por lo
43 responder con cualquier proyecto que
47 <para>Soporta autenticación proxy.</para>
50 <para>Incluye soporte para la autenticación contra archivos de
52 una interfaz para autenticar contra
53 otras fuentes, tales como bases de datos.</para>
58 Hay algunas características notables del
59 <acronym>RFC-2617</acronym>
60 no implementadas todavía:
64 <para>Seguimiento "nonce", que permitiría un gran apoyo, y un
66 protección de repetidos ataques.</para>
69 <para>Autenticación con comprobación de integridad, o
74 Cabecera de información de la autenticación
75 <acronym>HTTP</acronym>
83 <sect2 id="zend.auth.adapter.design_overview">
85 <title>Descripción del diseño</title>
88 Este adaptador consiste en dos sub-componentes, la propia clase
90 <acronym>HTTP</acronym>
91 , y el llamado "Resolvers". La
93 <acronym>HTTP</acronym>
94 encapsula la lógica para
95 llevar a cabo tanto la autenticación basica y la "Digest".
97 un Resolver para buscar la identidad de un cliente en los datos
99 defecto, archivos de texto), y recuperar las
100 credenciales de los datos almacenados. Las
102 "Resolved" se comparan con los valores presentados por el cliente
104 determinar si la autenticación es satisfactoria.
109 <sect2 id="zend.auth.adapter.configuration_options">
111 <title>Opciones de Configuración</title>
115 <classname>Zend_Auth_Adapter_Http</classname>
117 un array configurado que pasará a su constructor. Hay varias
119 configuración disponibles, y algunas son obligatorias:
121 <table id="zend.auth.adapter.configuration_options.table">
122 <title>Opciones de Configuración</title>
126 <entry>Nombre de Opción</entry>
127 <entry>Obligatoria</entry>
128 <entry>Descripción</entry>
135 <property>accept_schemes</property>
140 Determina que tareas de autenticación acepta el
141 adaptador del cliente.
142 Debe ser una lista separada
143 por espacios que contengo
144 <emphasis>'basic'</emphasis>
146 <emphasis>'digest'</emphasis>
153 <property>realm</property>
157 <entry> Establece el realm de autenticación; usernames
158 debe ser único dentro
159 de un determinado realm.
165 <property>digest_domains</property>
170 <property>accept_schemes</property>
172 <emphasis>'digest'</emphasis>
176 <acronym>URI</acronym>
178 espacios para las cuales la misma información de
179 autenticación es válida. No es necesario que todas
181 <acronym>URI</acronym>
189 <property>nonce_timeout</property>
194 <property>accept_schemes</property>
196 <emphasis>'digest'</emphasis>
198 <entry> Establece el número de segundos para los cuales
199 el "nonce" es válido.
200 Ver notas de abajo. </entry>
205 <property>proxy_auth</property>
209 <entry> Deshabilitado por defecto. Permite llevar a cabo
211 Proxy, en lugar de la
212 autenticación normal del servidor. </entry>
220 La implementación actual del
221 <property>nonce_timeout</property>
222 tiene algunos efectos
223 colaterales interesantes. Este ajuste es supuesto para
224 determinar la vida util válida para un determinado "nonce", o de
226 tiempo que una información de autenticación
227 del cliente es aceptada. Actualmente, si
229 (por ejemplo), hará que el adaptador indique al cliente las
230 nuevas credenciales cada hora, a la hora en punto.
236 <sect2 id="zend.auth.adapter.http.resolvers">
238 <title>Resolvers</title>
241 El trabajo del "Resolver" es tener un username y un realm, y
242 devolver algún valor de tipo
243 credencial. La autenticación básica
244 espera recibir la versión codificada en Base64 de la
246 usuario. La autenticación "Digest" espera recibir un hash del
248 usuario, un realm, y su contraseña (separados por
249 coma). Actualmente, sólo se admite el
251 <acronym>MD5</acronym>
256 <classname>Zend_Auth_Adapter_Http</classname>
258 implementación de objetos
259 <classname>Zend_Auth_Adapter_Http_Resolver_Interface</classname>
261 Un archivo de texto de la clase "Resolve" se incluye con este
262 adaptador, pero cualquier
263 otro tipo de "resolver" puede ser creado
264 simplemente implementando la interfaz del
268 <sect3 id="zend.auth.adapter.http.resolvers.file">
269 <title>Archivo Resolver</title>
271 El archivo "resolver" es una clase muy simple. Tiene una
273 especifique un nombre de archivo, que
274 también puede ser pasado al constructor. Su
276 <methodname>resolve()</methodname>
277 recorre el archivo de
278 texto, buscando una linea con el correspondiente username y
279 realm. El formato del archivo de texto es similar a los archivos
282 <programlisting language="txt"><![CDATA[
283 <username>:<realm>:<credentials>\n
286 Cada linea consta de tres campos -username, realm, y
287 credenciales - cada uno
288 separados por dos puntos. El campo
289 credenciales es opaco al archivo "resolver";
291 devuelve el valor tal como és al llamador. Por lo tanto, este
293 archivo sirve tanto de autenticación básica como
294 "Digest". En la autenticación
295 básica, el campo credenciales debe
296 ser escrito en texto claro. En la autenticación
299 <acronym>MD5</acronym>
304 <para>Hay dos formas igualmente fácil de crear un archivo de
306 <programlisting language="php"><![CDATA[
307 $path = 'files/passwd.txt';
308 $resolver = new Zend_Auth_Adapter_Http_Resolver_File($path);
311 <programlisting language="php"><![CDATA[
312 $path = 'files/passwd.txt';
313 $resolver = new Zend_Auth_Adapter_Http_Resolver_File();
314 $resolver->setFile($path);
316 <para>Si la ruta está vacía o no se puede leer, se lanza una
322 <sect2 id="zend.auth.adapter.http.basic_usage">
324 <title>Uso Básico</title>
326 <para>En primer lugar, establecemos un array con los valores de
327 configuración obligatorios:</para>
328 <programlisting language="php"><![CDATA[
330 'accept_schemes' => 'basic digest',
331 'realm' => 'My Web Site',
332 'digest_domains' => '/members_only /my_account',
333 'nonce_timeout' => 3600,
337 Este array hará que el adaptador acepte la autenticación básica o
338 "Digest", y requerirá
339 un acceso autenticado a todas las áreas del
341 <filename>/members_only</filename>
343 <filename>/my_account</filename>
344 . El valor realm es normalmente
345 mostrado por el navegador en el cuadro de dialogo
347 <property>nonce_timeout</property>
348 , por supuesto, se comporta
349 como se ha descrito anteriormente.
352 <para>A continuación, creamos el objeto Zend_Auth_Adapter_Http:</para>
353 <programlisting language="php"><![CDATA[
354 $adapter = new Zend_Auth_Adapter_Http($config);
357 <para>Ya que estamos soportando tanto la autenticación básica como la
358 "Digest", necesitamos
359 dos objetos diferentes resolver. Tenga en
360 cuenta que esto podría ser facilmente dos
361 clases diferentes:</para>
362 <programlisting language="php"><![CDATA[
363 $basicResolver = new Zend_Auth_Adapter_Http_Resolver_File();
364 $basicResolver->setFile('files/basicPasswd.txt');
366 $digestResolver = new Zend_Auth_Adapter_Http_Resolver_File();
367 $digestResolver->setFile('files/digestPasswd.txt');
369 $adapter->setBasicResolver($basicResolver);
370 $adapter->setDigestResolver($digestResolver);
373 <para>Por último, realizamos la autenticación. El adaptador necesita
374 una referencia a ambos
375 objetos solicitud y respuesta para hacer su
377 <programlisting language="php"><![CDATA[
378 assert($request instanceof Zend_Controller_Request_Http);
379 assert($response instanceof Zend_Controller_Response_Http);
381 $adapter->setRequest($request);
382 $adapter->setResponse($response);
384 $result = $adapter->authenticate();
385 if (!$result->isValid()) {
386 // Bad userame/password, or canceled password prompt