Zend_Auth_Adapter_Http.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 16855 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.auth.adapter.http">
  5. <title>Adaptador de Autenticación HTTP</title>
  6. <sect2 id="zend.auth.adapter.http.introduction">
  7. <title>Introducción</title>
  8. <para>
  9. <classname>Zend_Auth_Adapter_Http</classname> proporciona una
  10. implementación compatible con <ulink
  11. url="http://tools.ietf.org/html/rfc2617">RFC-2617</ulink>,
  12. <ulink
  13. url="http://en.wikipedia.org/wiki/Basic_authentication_scheme"
  14. >Basic</ulink> y <ulink
  15. url="http://en.wikipedia.org/wiki/Digest_access_authentication"
  16. >Digest</ulink> Autenticación <acronym>HTTP</acronym>. La
  17. autenticación "Digest" es un método de autenticación
  18. <acronym>HTTP</acronym> que mejora la autenticación básica
  19. proporcionando una manera de autenticar sin tener que transmitir la
  20. contraseña de manera clara en un texto a través de la red. </para>
  21. <para>
  22. <emphasis role="strong">Características Principales:</emphasis>
  23. </para>
  24. <itemizedlist>
  25. <listitem>
  26. <para> Soporta tanto Autenticación "Digest" como Básica. </para>
  27. </listitem>
  28. <listitem>
  29. <para> Establece retos en todos los proyectos soportados, por lo
  30. que el cliente puede responder con cualquier proyecto que
  31. soporte. </para>
  32. </listitem>
  33. <listitem>
  34. <para> Soporta autenticación proxy. </para>
  35. </listitem>
  36. <listitem>
  37. <para> Incluye soporte para la autenticación contra archivos de
  38. texto y proporciona una interfaz para autenticar contra
  39. otras fuentes, tales como bases de datos. </para>
  40. </listitem>
  41. </itemizedlist>
  42. <para> Hay algunas características notables del
  43. <acronym>RFC</acronym>-2617 no implementadas todavía: </para>
  44. <itemizedlist>
  45. <listitem>
  46. <para> Seguimiento "nonce", que permitiría un gran apoyo, y un
  47. aumento de la protección de repetidos ataques. </para>
  48. </listitem>
  49. <listitem>
  50. <para> Autenticación con comprobación de integridad, o
  51. "auth-int". </para>
  52. </listitem>
  53. <listitem>
  54. <para> Cabecera de información de la autenticación
  55. <acronym>HTTP</acronym>. </para>
  56. </listitem>
  57. </itemizedlist>
  58. </sect2>
  59. <sect2 id="zend.auth.adapter.design_overview">
  60. <title>Descripción del diseño</title>
  61. <para> Este adaptador consiste en dos sub-componentes, la propia clase
  62. autenticación <acronym>HTTP</acronym>, y el llamado "Resolvers". La
  63. clase autenticación <acronym>HTTP</acronym> encapsula la lógica para
  64. llevar a cabo tanto la autenticación basica y la "Digest". Utiliza
  65. un Resolver para buscar la identidad de un cliente en los datos
  66. almacenados (por defecto, archivos de texto), y recuperar las
  67. credenciales de los datos almacenados. Las credenciales del
  68. "Resolved" se comparan con los valores presentados por el cliente
  69. para determinar si la autenticación es satisfactoria. </para>
  70. </sect2>
  71. <sect2 id="zend.auth.adapter.configuration_options">
  72. <title>Opciones de Configuración</title>
  73. <para> La clase <classname>Zend_Auth_Adapter_Http</classname> requiere
  74. un array configurado que pasará a su constructor. Hay varias
  75. opciones de configuración disponibles, y algunas son obligatorias: </para>
  76. <table id="zend.auth.adapter.configuration_options.table">
  77. <title>Opciones de Configuración</title>
  78. <tgroup cols="3">
  79. <thead>
  80. <row>
  81. <entry>Nombre de Opción</entry>
  82. <entry>Obligatoria</entry>
  83. <entry>Descripción</entry>
  84. </row>
  85. </thead>
  86. <tbody>
  87. <row>
  88. <entry>
  89. <emphasis>
  90. <property>accept_schemes</property>
  91. </emphasis>
  92. </entry>
  93. <entry>Si</entry>
  94. <entry> Determina que tareas de autenticación acepta el
  95. adaptador del cliente. Debe ser una lista separada
  96. por espacios que contengo
  97. <emphasis>'basic'</emphasis> y/o
  98. <emphasis>'digest'</emphasis>. </entry>
  99. </row>
  100. <row>
  101. <entry>
  102. <emphasis>
  103. <property>realm</property>
  104. </emphasis>
  105. </entry>
  106. <entry>Si</entry>
  107. <entry> Establece el realm de autenticación; usernames
  108. debe ser único dentro de un determinado realm.
  109. </entry>
  110. </row>
  111. <row>
  112. <entry>
  113. <emphasis>
  114. <property>digest_domains</property>
  115. </emphasis>
  116. </entry>
  117. <entry>Si, cuando
  118. <methodname>'accept_schemes'</methodname>
  119. contiene <emphasis>'digest'</emphasis></entry>
  120. <entry> Lista de URIs separadas por espacios para las
  121. cuales la misma información de autenticación es
  122. válida. No es necesario que todas las URIs apunten
  123. al mismo oservidor. </entry>
  124. </row>
  125. <row>
  126. <entry>
  127. <emphasis>
  128. <property>nonce_timeout</property>
  129. </emphasis>
  130. </entry>
  131. <entry>Si, cuando
  132. <methodname>'accept_schemes'</methodname>
  133. contiene <emphasis>'digest'</emphasis></entry>
  134. <entry> Establece el número de segundos para los cuales
  135. el "nonce" es válido. Ver notas de abajo. </entry>
  136. </row>
  137. <row>
  138. <entry>
  139. <emphasis>
  140. <property>proxy_auth</property>
  141. </emphasis>
  142. </entry>
  143. <entry>No</entry>
  144. <entry> Deshabilitado por defecto. Permite llevar a cabo
  145. la autenticación del Proxy, en lugar de la
  146. autenticación normal del servidor. </entry>
  147. </row>
  148. </tbody>
  149. </tgroup>
  150. </table>
  151. <note>
  152. <para> La implementación actual del
  153. <property>nonce_timeout</property> tiene algunos efectos
  154. colaterales interesantes. Este ajuste es supuesto para
  155. determinar la vida util válida para un determinado "nonce", o de
  156. manera efectiva el tiempo que una información de autenticación
  157. del cliente es aceptada. Actualmente, si se establece en 3600
  158. (por ejemplo), hará que el adaptador indique al cliente las
  159. nuevas credenciales cada hora, a la hora en punto. </para>
  160. </note>
  161. </sect2>
  162. <sect2 id="zend.auth.adapter.http.resolvers">
  163. <title>Resolvers</title>
  164. <para> El trabajo del "Resolver" es tener un username y un realm, y
  165. devolver algún valor de tipo credencial. La autenticación básica
  166. espera recibir la versión codificada en Base64 de la contraseña del
  167. usuario. La autenticación "Digest" espera recibir un hash del
  168. username del usuario, un realm, y su contraseña (separados por
  169. coma). Actualmente, sólo se admite el algoritmo de hash
  170. <acronym>MD5</acronym>. </para>
  171. <para>
  172. <classname>Zend_Auth_Adapter_Http</classname> se basa en la
  173. implementación de objetos
  174. <classname>Zend_Auth_Adapter_Http_Resolver_Interface</classname>.
  175. Un archivo de texto de la clase "Resolve" se incluye con este
  176. adaptador, pero cualquier otro tipo de "resolver" puede ser creado
  177. simplemente implementando la interfaz del "resolver". </para>
  178. <sect3 id="zend.auth.adapter.http.resolvers.file">
  179. <title>Archivo Resolver</title>
  180. <para> El archivo "resolver" es una clase muy simple. Tiene una
  181. única propiedad que especifique un nombre de archivo, que
  182. también puede ser pasado al constructor. Su método
  183. <methodname>resolve()</methodname> recorre el archivo de
  184. texto, buscando una linea con el correspondiente username y
  185. realm. El formato del archivo de texto es similar a los archivos
  186. htpasswd de Apache:
  187. </para>
  188. <programlisting><![CDATA[
  189. <username>:<realm>:<credentials>\n
  190. ]]></programlisting>
  191. <para>
  192. Cada linea consta de tres campos -username, realm, y
  193. credenciales - cada uno separados por dos puntos. El campo
  194. credenciales es opaco al archivo "resolver"; simplemente
  195. devuelve el valor tal como és al llamador. Por lo tanto, este
  196. formato de archivo sirve tanto de autenticación básica como
  197. "Digest". En la autenticación básica, el campo credenciales debe
  198. ser escrito en texto claro. En la autenticación "Digest",
  199. debería ser en hash <acronym>MD5</acronym> descrito
  200. anteriormente. </para>
  201. <para> Hay dos formas igualmente fácil de crear un archivo de
  202. "resolver": </para>
  203. <programlisting language="php"><![CDATA[
  204. $path = 'files/passwd.txt';
  205. $resolver = new Zend_Auth_Adapter_Http_Resolver_File($path);
  206. ]]></programlisting>
  207. <para> o </para>
  208. <programlisting language="php"><![CDATA[
  209. $path = 'files/passwd.txt';
  210. $resolver = new Zend_Auth_Adapter_Http_Resolver_File();
  211. $resolver->setFile($path);
  212. ]]></programlisting>
  213. <para>
  214. Si la ruta está vacía o no se puede leer, se lanza una
  215. excepción.
  216. </para>
  217. </sect3>
  218. </sect2>
  219. <sect2 id="zend.auth.adapter.http.basic_usage">
  220. <title>Uso Básico</title>
  221. <para> En primer lugar, establecemos un array con los valores de
  222. configuración obligatorios: </para>
  223. <programlisting language="php"><![CDATA[
  224. $config = array(
  225. 'accept_schemes' => 'basic digest',
  226. 'realm' => 'My Web Site',
  227. 'digest_domains' => '/members_only /my_account',
  228. 'nonce_timeout' => 3600,
  229. );
  230. ]]></programlisting>
  231. <para> Este array hará que el adaptador acepte la autenticación básica o
  232. "Digest", y requerirá un acceso autenticado a todas las áreas del
  233. sitio en <filename>/members_only</filename> y
  234. <filename>/my_account</filename>. El valor realm es normalmente
  235. mostrado por el navegador en el cuadro de dialogo contraseña. El
  236. <property>nonce_timeout</property>, por supuesto, se comporta
  237. como se ha descrito anteriormente. </para>
  238. <para> A continuación, creamos el objeto Zend_Auth_Adapter_Http: </para>
  239. <programlisting language="php"><![CDATA[
  240. $adapter = new Zend_Auth_Adapter_Http($config);
  241. ]]></programlisting>
  242. <para> Ya que estamos soportando tanto la autenticación básica como la
  243. "Digest", necesitamos dos objetos diferentes resolver. Tenga en
  244. cuenta que esto podría ser facilmente dos clases diferentes: </para>
  245. <programlisting language="php"><![CDATA[
  246. $basicResolver = new Zend_Auth_Adapter_Http_Resolver_File();
  247. $basicResolver->setFile('files/basicPasswd.txt');
  248. $digestResolver = new Zend_Auth_Adapter_Http_Resolver_File();
  249. $digestResolver->setFile('files/digestPasswd.txt');
  250. $adapter->setBasicResolver($basicResolver);
  251. $adapter->setDigestResolver($digestResolver);
  252. ]]></programlisting>
  253. <para> Por último, realizamos la autenticación. El adaptador necesita
  254. una referencia a ambos objetos solicitud y respuesta para hacer su
  255. trabajo: </para>
  256. <programlisting language="php"><![CDATA[
  257. assert($request instanceof Zend_Controller_Request_Http);
  258. assert($response instanceof Zend_Controller_Response_Http);
  259. $adapter->setRequest($request);
  260. $adapter->setResponse($response);
  261. $result = $adapter->authenticate();
  262. if (!$result->isValid()) {
  263. // Bad userame/password, or canceled password prompt
  264. }
  265. ]]></programlisting>
  266. </sect2>
  267. </sect1>