<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de PRISE &#187; PAPI</title>
	<atom:link href="https://www.prise.es/blog/category/papi/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.prise.es/blog</link>
	<description>Blog del equipo de PRISE</description>
	<lastBuildDate>Fri, 05 Jul 2024 09:38:44 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>PAPI y sus primos de Zumosol</title>
		<link>https://www.prise.es/blog/papi-y-sus-primos-de-zumosol/</link>
		<comments>https://www.prise.es/blog/papi-y-sus-primos-de-zumosol/#comments</comments>
		<pubDate>Fri, 03 Oct 2014 08:06:52 +0000</pubDate>
		<dc:creator><![CDATA[diego.r.lopez]]></dc:creator>
				<category><![CDATA[I+D+i]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=1353</guid>
		<description><![CDATA[Nuevas iniciativas en el IETF]]></description>
				<content:encoded><![CDATA[<p>Después de algunos años en los que ha venido demostrando su capacidad para desplegar infraestructuras de identidad digital a la vez flexibles, ligeras y seguras, al protocolo PAPI le han salido un par de <em>primos de Zumosol</em> que demuestran que las ideas que unos cuantos desarrollamos hace algún tiempo no eran tan malas, y que simplemente nacieron en un tiempo en el que XML y los esquemas complicados de Web Services era el credo dominante y cualquiera que fuera en contra de ellos era un hereje imperdonable.</p>
<p>Hay un par iniciativas en el IETF que van tomando forma y cuya filosofía está muy cerca de lo que PAPI proponía y propone. Si alguien tiene curiosidad, una vuelta a las especificaciones de <a href="http://tools.ietf.org/wg/jose/">JOSE</a> y <a href="http://tools.ietf.org/html/draft-ietf-httpauth-hoba-04">HOBA</a>. Incluso <a href="http://oauth.net">OAuth</a>, un mecanismo de acceso más que consolidado, tiene mucho en común con el intercambio de tokens en PAPI.</p>
<p>Ser pionero e ir (un poco) contracorriente tiene sus problemas, pero a la larga da cierto placer sentirse reivindicado&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/papi-y-sus-primos-de-zumosol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacia el nuevo SIR de RedIRIS</title>
		<link>https://www.prise.es/blog/hacia-el-nuevo-sir-de-rediris/</link>
		<comments>https://www.prise.es/blog/hacia-el-nuevo-sir-de-rediris/#comments</comments>
		<pubDate>Mon, 11 Aug 2014 10:22:03 +0000</pubDate>
		<dc:creator><![CDATA[PRiSE]]></dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=1332</guid>
		<description><![CDATA[Asegura con nosotros tu integración ininterrumpida con SIR]]></description>
				<content:encoded><![CDATA[<p>En los últimos g<a href="http://www.rediris.es/gt/gt2014/programa/" target="_blank">rupos de trabajo de Rediris</a>, a través de la ponencia <a href="http://www.rediris.es/gt/gt2014/ponencias/?id=gt2014-gt-mdwiden-a17b3c1.odp" target="_blank">Actualidad del servicio SIR</a>, se dio a conocer el próximo futuro de la federación SIR.</p>
<p>La actual federación cuenta tanto con IdP&#8217;s y SP&#8217;s conectados a través de multiprotocolos (PAPI, SAML, OpenID, etc) y en su línea de vida está pendiente una reestructuración, por lo que muchas entidades se verán afectadas.</p>
<p>Uno de los principales cambios afectará a la actual integración multiprotocolo, eliminándola y permitiendo únicamente «usar SAML2 como protocolo intrafederación».</p>
<p>Si tu institución será una de las afectadas por no contar con un IdP que permita una integración con SAML te recomendamos que te pongas en contacto con nosotros para un cambio totalmente transparente para tus usuarios. Contamos con experiencia en IdP&#8217;s SAML, recomendándote el más adecuado para tu organización.</p>
<p>De la misma forma, contamos con múltiples servicios para tus aplicaciones PAPI, ayudándote a actualizarlas hacia otros protocolos, mejorarlas y/o gestionarlas.</p>
<p>Adelántate al futuro y asegúrate un cambio sencillo, fácil y transparente.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/hacia-el-nuevo-sir-de-rediris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primera release candidate de EasyPoA</title>
		<link>https://www.prise.es/blog/primera-release-candidate-de-easypoa/</link>
		<comments>https://www.prise.es/blog/primera-release-candidate-de-easypoa/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 11:32:05 +0000</pubDate>
		<dc:creator><![CDATA[Daniel]]></dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=785</guid>
		<description><![CDATA[EasyPoA es un PoA PAPI ligero desarrollado en PHP. Cuyo principal objetivo es facilitar la tarea de proteger aplicaciones web PHP por medio de protocolo PAPI.]]></description>
				<content:encoded><![CDATA[<p>EasyPoA es un PoA PAPI ligero desarrollado en PHP. Cuyo principal objetivo es facilitar la tarea de proteger aplicaciones web PHP por medio de protocolo PAPI.</p>
<p>La primera <em>release candidate</em> de EasyPoA está disponible en <a href="http://www.papisoftware.net">papisoftware</a></p>
<p>Para conseguir que EasyPoA sea un componente ligero, se han restringido determinadas características comunes de los PoAs siendo la primera el hecho de no implementar el mensaje <a href="http://www.papisoftware.net/doku.php?id=documentacion:protocolo#mensaje_attreq">ATTREQ</a> del protocolo PAPI, por lo que EasyPoA <strong>sólo</strong> puede hablar con GPoAs, puesto que no tiene la capacidad de interrogar a un AuthServer acerca de los usuarios.<br />
También se ha eliminado la capacidad de realizar filtros de acceso basados en los datos recibidos en la aserción. De forma que la responsabilidad de realizar el control de acceso recae en la aplicación protegida.</p>
<p>EasyPoA no hace uso de las tradicionales cookies Hcook y LcooK, usadas por los componentes pesados de PAPI para mantener el contexto de seguridad. Así como tampoco necesita ficheros DB o bases de datos donde mantener los datos relativos a las peticiones de los usuarios. Sino que mantiene el contexto de seguridad y los parámetros de la petición original en la sesión PHP de usuario. Consiguiendo así un componente PAPI fácil de configurar en entornos de alta disponibilidad y balanceo de carga, sólo es necesario que los balanceadores mantengan las sesiones HTTP.</p>
<p>Por último se ha reducido el juego de directivas de configuración necesarias para configurar un PoA, y se ha optado por un fichero de configuración .ini de PHP</p>
<p>Para obtener más información sobre como instalar, configurar y usar EasyPoA, pueden encontrarla en <a href="http://www.papisoftware.net/doku.php?id=software:php:easypoa">EasyPoA@PAPISoftware</a></p>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/primera-release-candidate-de-easypoa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PAPI y PHP 5.2</title>
		<link>https://www.prise.es/blog/papi-y-php-5-2/</link>
		<comments>https://www.prise.es/blog/papi-y-php-5-2/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 13:50:52 +0000</pubDate>
		<dc:creator><![CDATA[Teresa]]></dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=753</guid>
		<description><![CDATA[Todos los compontes de PAPI desarrollados en PHP necesitan utilizar la función 'openssl_pkey_get_details', que sólo está disponible para PHP versión 5.2 o superior. Veremos una solución "de emergencia" para aquellos casos que no es posible actualizar el PHP.]]></description>
				<content:encoded><![CDATA[<p>Todos los compontes de PAPI desarrollados en PHP necesitan utilizar la función &#8216;<a href="http://es2.php.net/manual/en/function.openssl-pkey-get-details.php">openssl_pkey_get_details</a>&#8216;, ya que siempre se necesita trabajar con la clave pública RSA de algún componente de la infraestructura PAPI donde está desplegado.</p>
<p>El problema que muchos de nosotros nos hemos encontrado cuando hemos realizado instalaciones de PAPI, es que algunas distribuciones de Linux, como Red Hat, sólo incluyen la versión 5.1.6 dentro de sus ramas o versiones <em>estables</em>.</p>
<p>En <a href="http://www.adas-sso.com/">adAS</a> hemos intentado hacer la vida más fácil a la hora de instalarlo, por lo que estamos incorporando una solución «de emergencia» (o <em>workaround</em>) para aquellas situaciones en las que es imposible actualizar la versión de PHP. ¿Cómo? Utilizando el ejecutable de OpenSSL.</p>
<p>La función de PHP &#8216;openssl_pkey_get_details&#8217; necesita un parámetro con un objeto que representa a la clave y devuelve un &#8216;array&#8217; con la siguiente estructura (para el caso de claves RSA, que es el que nos interesa):</p>
<blockquote>
<pre>array(</pre>
<pre style="padding-left: 30px">'bits' =&gt; ...,</pre>
<pre style="padding-left: 30px">'key' =&gt; ...,</pre>
<pre style="padding-left: 30px">'type' =&gt; 0,</pre>
<pre style="padding-left: 30px">'rsa' =&gt; array(</pre>
<pre style="padding-left: 60px">'n' =&gt; ...,</pre>
<pre style="padding-left: 60px">'e' =&gt; ...</pre>
<pre style="padding-left: 30px">),</pre>
<pre>)</pre>
</blockquote>
<p>Donde,</p>
<ul>
<li><strong>bits</strong>: es el número de bits de la clave.</li>
<li><strong>key</strong>: es la clave en formato PEM.</li>
<li><strong>type</strong>: su valor es OPENSSL_KEYTYPE_RSA.</li>
<li><strong>rsa</strong>: es un array con la siguiente información</li>
<li>
<ul>
<li><strong>n</strong>: es el módulo de la clave RSA.</li>
<li><strong>e</strong>: es el exponente de la clave RSA.</li>
</ul>
</li>
</ul>
<p>Toda esta información la podemos obtener también ejecutando el comando &#8216;openssl&#8217;, aunque lo obtendremos en otro formato:</p>
<blockquote>
<pre>$ openssl rsa -pubin -in test.pem -modulus -text</pre>
<pre>Modulus (<span style="color: #800000"><strong>1024 bit</strong></span>):</pre>
<pre>00:a8:cd:4f:02:e4:b3:2c:b7:3b:3b:77:7c:0f:c8:</pre>
<pre>9b:24:66:c9:92:9d:05:8e:4b:b4:50:14:8b:41:00:</pre>
<pre>19:f7:31:49:49:4a:38:40:81:8f:29:a4:99:eb:0c:</pre>
<pre>4c:ee:a3:6c:d5:04:a1:8a:1f:1b:33:2a:da:95:5e:</pre>
<pre>62:40:b1:2a:99:36:37:d5:1d:9a:99:26:b7:7b:11:</pre>
<pre>0c:37:84:e0:d0:15:42:1c:d3:b5:61:f7:0f:8a:b6:</pre>
<pre>ca:18:03:0d:36:c2:50:f5:ae:b5:60:16:c0:92:f3:</pre>
<pre>84:68:12:a8:e1:ce:72:21:c9:d1:2c:18:e4:e7:37:</pre>
<pre>c3:79:d8:22:38:86:2a:dc:97</pre>
<pre><strong>Exponent: 65537 (0x10001)</strong></pre>
<pre><strong>Modulus=A8CD4F02E4B32C ... C18E4E737C379D82238862ADC97</strong></pre>
<pre>writing RSA key</pre>
<pre>-----BEGIN PUBLIC KEY-----</pre>
<pre>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCozU8C5LMstzs7d3wPyJskZsmS</pre>
<pre>nQWOS7RQFItBABn3MUlJSjhAgY8ppJnrDEzuo2zVBKGKHxszKtqVXmJAsSqZNjfV</pre>
<pre>HZqZJrd7EQw3hODQFUIc07Vh9w+KtsoYAw02wlD1rrVgFsCS84RoEqjhznIhydEs</pre>
<pre>GOTnN8N52CI4hirclwIDAQAB</pre>
<pre>-----END PUBLIC KEY-----</pre>
</blockquote>
<div>Obtener el número de bits de la clave pública es bastante fácil ya que no tenemos que hacer ninguna conversión (de la clave pública en formato PEM ni hablamos, ya que sin ella no hubiésemos podido ejecutar dicho comando).</div>
<div>El exponente se nos indica en hexadecimal: 0x10001. Éste valor hemos de procesarlo en PHP de la siguiente manera:</div>
<blockquote>
<div>
<pre>$data = explode("\n", trim($salida));</pre>
<pre>for ($i = 0; $i &lt; count($data); $i++) {</pre>
<pre style="padding-left: 30px">$temp = explode(" ", $data[$i]);</pre>
<pre style="padding-left: 30px">if ($temp[0] == "Exponent:") {</pre>
<pre style="padding-left: 60px">$exp = $temp[1];</pre>
<pre style="padding-left: 30px">}</pre>
<pre>}</pre>
<pre>$e = base_convert($exp, 10, 16);</pre>
<pre>$e = asciihex2hex($e);</pre>
</div>
</blockquote>
<div>Como vemos, nos quedamos con el valor en decimal que nos indica OpenSSL, 65537 en nuestro ejemplo, y lo pasamos a hexadecimal cambiando la base de 10 a 16. Como obtendremos el valor &#8216;10001&#8217;, utilizaremos la siguiente función para obtener el valor en decimal:</div>
<blockquote>
<div>
<pre>function asciihex2hex($str) {</pre>
<pre style="padding-left: 30px">while ((strlen($str) % 2) != 0) {</pre>
<pre style="padding-left: 60px">$str = "0" . $str;</pre>
<pre style="padding-left: 30px">}</pre>
<pre style="padding-left: 30px">$out = "";</pre>
<pre style="padding-left: 30px">for ($i = 0; $i &lt; strlen($str); $i+=2) {</pre>
<pre style="padding-left: 60px">$out .= chr(hexdec($str[$i] . $str[$i + 1]));</pre>
<pre style="padding-left: 30px">}</pre>
<pre style="padding-left: 30px">return $out;</pre>
<pre>}</pre>
</div>
</blockquote>
<div>Con respecto al módulo de la clave RSA, OpenSSL nos ofrece su valor en hexadecimal en una cadena de texto, por lo que para pasarlo a decimal número utilizaremos la siguiente receta:</div>
<blockquote>
<div>
<pre>$data = explode("\n", trim($salida));</pre>
<pre>for ($i = 0; $i &lt; count($data); $i++) {</pre>
<pre style="padding-left: 30px">$temp = explode(" ", $data[$i]);</pre>
<pre style="padding-left: 30px">if (strpos($data[$i], "Modulus=") !== false) {</pre>
<pre style="padding-left: 60px">$modulus = substr($data[$i], strlen("Modulus="));</pre>
<pre style="padding-left: 30px">}</pre>
<pre>}</pre>
<pre>$m = $modulus;</pre>
<pre>$m = self::asciihex2hex($m);</pre>
</div>
</blockquote>
<div>De esta forma ya tenemos toda la información que nos hubiese dado la función de openssl &#8216;openssl_pkey_get_details':</div>
<blockquote>
<pre>
<div>$res = array(</div>
<div style="padding-left: 30px">'bits' =&gt; $keylength,</div>
<div style="padding-left: 30px">'key' =&gt; $publickeypem,</div>
<div style="padding-left: 30px">'type' =&gt; 0,</div>
<div style="padding-left: 30px">'rsa' =&gt; array(</div>
<div style="padding-left: 60px">'n' =&gt; $m,</div>
<div style="padding-left: 60px">'e' =&gt; $e</div>
<div style="padding-left: 30px">)</div>
<div>);</div></pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/papi-y-php-5-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>adAS</title>
		<link>https://www.prise.es/blog/adas/</link>
		<comments>https://www.prise.es/blog/adas/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 15:12:08 +0000</pubDate>
		<dc:creator><![CDATA[Teresa]]></dc:creator>
				<category><![CDATA[adAS]]></category>
		<category><![CDATA[I+D+i]]></category>
		<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=711</guid>
		<description><![CDATA[Sale a la luz la <a href="http://www.adas-sso.com">página oficial de adAS</a>, herramienta multiprotocolo de Single Sing-On desarrollada por PRiSE.]]></description>
				<content:encoded><![CDATA[<p>Desde PRiSE queremos anunciar la salida a la luz de la <a href="http://www.adas-sso.com">página oficial de adAS</a> (advanced Authentication Server). </p>
<p>Para los que aún no hayáis escuchado nada de él, adAS es un Servidor de Autenticación Avanzado  que realiza funciones de proveedor de identidad y que integran los distintos protocolos que se engloban la identidad digital de una organización, como pueden ser <a href="http://www.papisoftware.net">PAPI v1</a>, <a href="http://saml.xml.org/saml-specifications#samlv10">SAML 1.1/Shibboleth 1.3</a> o <a href="http://saml.xml.org/saml-specifications#samlv20">SAML 2.0</a>.</p>
<p>adAS ofrece muchas ventajas con respecto a aplicaciones similares, pero una de las principales es  la facilidad de gestión y mantenimiento de los sistemas integrados en este Single Sign-On, gracias a su interfaz web de administración. Mediante éste es posible configurar todos los aspectos que integran una aplicación de este tipo: gestión de proveedores de servicio, metadatos, políticas de atributos, soporte de diferentes fuentes de datos, etc. </p>
<p>Además, no solo se centra en facilitar la configuración y en tener un buen funcionamiento, si no que su objetivo es, además, facilitar el trabajo a los encargados de la identidad digital de las distintas organizaciones, integrando herramientas de visualización y búsquedas rápidas en los archivos de log, generando estadísticas de acceso y autenticación del sistema e incluso posibilitando el funcionamiento de esta herramienta con DNI electrónico.</p>
<p>¿Quiéres saber más sobre adAS?: <a href="http://www.adas-sso.com">Visita su nueva página web.</a></p>
<div style="width: 515px" class="wp-caption alignright"><a href="http://www.adas-sso.com/"><img alt="" src="http://www.adas-sso.com/mm/adAS.png" width="505" height="277" /></a><p class="wp-caption-text">adAS Dashboard</p></div>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/adas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASProxy</title>
		<link>https://www.prise.es/blog/asproxy/</link>
		<comments>https://www.prise.es/blog/asproxy/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 18:26:46 +0000</pubDate>
		<dc:creator><![CDATA[Teresa]]></dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=657</guid>
		<description><![CDATA[ASProxy es un nuevo elemento en PHP para el protocolo PAPI. Éste permite conectar dos Federaciones PAPI para que usuarios de una federación puedan acceder a recursos de otra.]]></description>
				<content:encoded><![CDATA[<p>En uno de nuestros proyectos nos hemos encontrado con la situación de tener que unir dos federaciones PAPI, permitiendo que personas que pertenezcan a una federación puedan acceder a los recursos federados de otra federación.</p>
<p>La solución que hemos ideado ha llevado al desarrollo de un nuevo elemento en php que implementa el protocolo PAPI, al cual le hemos denominado <b>ASProxy</b>.</p>
<p>Este elemento permite conectar dos GPoAs, cada uno de una federación diferente. Para la federación que protege los recursos, el ASProxy actúa como un AS normal, pero para el GPoA de la federación a la que pertenece el usuario, el ASProxy se comporta como un PoA.</p>
<p>Cuando un ASProxy recibe un mensaje ATTREQ de un GPoA, traduce esa petición en un mensaje CHECK, almacenando en la sesión información necesaria para cuando esa petición sea contestada. En esa petición ATTREQ se envíará el parámetro PAPIHLI con el valor del AS de la federación 2 al que pertenece, pudiendo así evitar el paso de que el usuario tenga que seleccionar de nuevo en un WAYF a qué institución pertenece.</p>
<p>Cuando a un ASProxy le llega un mensaje CHECKED de respuesta proveniente del GPoA de la federación 2, éste deberá transformar este mensaje, descifrándolo con la clave pública del GPoA de la federación 2, modificando la información necesaria y cifrándolo con su clave privada para que el GPoA de la federación 1 pueda comprender la respuesta.<br />
Esta será un mensaje CHECKED de tipo AS-&gt;GPoA, distinto del recibido anteriormente, de tipo GPoA-&gt;PoA.</p>
<p><a href="http://www.prise.es/blog/wp-content/uploads/2010/07/ASProxy1.png"><img src="http://www.prise.es/blog/wp-content/uploads/2010/07/ASProxy1.png" alt="" width="514" height="722" class="aligncenter size-full wp-image-663" /></a></p>
<p>Como una extensión futura a este componente, estamos pensando la forma más adecuada de enviar, dentro de la aserción obtenida, el AS de la federación 2 donde el usuario se ha autenticado para que así, en la federación 1, puedan realizar filtros con esta información.</p>
<p>Desde PRiSE seguiremos informando de cómo evoluciona este componente.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/asproxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuevos desarrollos PAPI</title>
		<link>https://www.prise.es/blog/nuevos-desarrollos-papi/</link>
		<comments>https://www.prise.es/blog/nuevos-desarrollos-papi/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 17:46:16 +0000</pubDate>
		<dc:creator><![CDATA[Teresa]]></dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=650</guid>
		<description><![CDATA[PRiSE desarrolla con el soporte de la Universidad de Sevilla dos nuevos componentes PAPI: PHP easyGPoA y PHP icGPoA]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.prise.es/blog/wp-content/uploads/2010/07/Logo-Universidad-de-Sevilla_marca-dos-tintas_150-2.gif"><img class="alignleft wp-image-653" style="padding-right: 2em" src="http://www.prise.es/blog/wp-content/uploads/2010/07/Logo-Universidad-de-Sevilla_marca-dos-tintas_150-2.gif" alt="" width="75" /></a>Recientemente hemos finalizado un proyecto que hemos llevado a cabo con la Universidad de Sevilla para actualizar y migrar a nuevas versiones su actual despliegue de PAPI en sus instalaciones.</p>
<p>Gracias a este proyecto y su apoyo hemos podido desarrollar dos nuevos componentes PAPI con licencia GPL. Estos son los siguientes:</p>
<ul>
<li><strong>PHP easyGPoA</strong>: es un GPoA desarrollado 100% en PHP y muy sencillo. El objetivo es proveer de un componente de este tipo de funcionalidad para aquellos casos que no requieren una complejidad elevada. Sus características principales son:
<ul>
<li>GPoA 100% funcional desarrollado en PHP.</li>
<li>Permite definir qué Proveedores de Identidad PAPI admite.</li>
<li>Filtro de atributos por PoA, permitiendo definir qué atributos se deben mandar a cada uno de los PoAs en los que confía.</li>
<li><em>Where Are You From?</em> o selector de Proveedor de Identidad PAPI.</li>
</ul>
</li>
<li><strong>PHP icGPoA</strong>: es una re-implementación completa del icGPoA desarrollado en PHP de manera que tengamos uno modular que sea más fácil de mantener entre todos los usuarios de este componente. De esta forma, las adaptaciones locales están separadas del código principal, por lo que a partir de ahora será más fácil mantener nuestro icGPoA a la última versión oficial.</li>
</ul>
<p>Todavía no hay mucha documentación de ambos proyectos, y es que estamos trabajando en la nueva web de PAPI donde estamos escribiendo ya cómo instalarlos y cómo configurarlos, además de mucha más información del resto de los componentes.</p>
<p>Si quieres ir probándolos, puedes descargarlos utilizando los siguientes repositorios <a href="http://mercurial.selenic.com/">Mercurial</a>:</p>
<ul>
<li><em>hg clone <a href="http://www.prise.es/hg/papi-easygpoa">http://www.prise.es/hg/papi-easygpoa</a></em></li>
<li><em>hg clone <a href="http://www.prise.es/hg/papi-icgpoa">http://www.prise.es/hg/papi-icgpoa</a></em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/nuevos-desarrollos-papi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrando de OpenSSO a PAPI</title>
		<link>https://www.prise.es/blog/migrando-de-opensso-a-papi/</link>
		<comments>https://www.prise.es/blog/migrando-de-opensso-a-papi/#comments</comments>
		<pubDate>Sun, 09 May 2010 09:21:15 +0000</pubDate>
		<dc:creator><![CDATA[Teresa]]></dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=593</guid>
		<description><![CDATA[OpenSSO2PAPI es un nuevo software desarrollado por PRiSE para permitir una migración transparente de OpenSSO a PAPI en nuestras infraestructuras.]]></description>
				<content:encoded><![CDATA[<p>El 20 de Abril del 2009 fue un mal día para las organizaciones (y el software libre en general, aunque es mi opinión personal y ya hablaré de esto en otro momento) que utilizaban <a href="https://opensso.dev.java.net/">OpenSSO</a>: <a href="http://www.sun.com/third-party/global/oracle/">Oracle decidió comprar Sun Microsystems</a>.</p>
<div style="text-align: center"><a href="http://www.prise.es/blog/wp-content/uploads/2010/05/OracleToBuySun.png"><img style="float: none" src="http://www.prise.es/blog/wp-content/uploads/2010/05/OracleToBuySun-300x127.png" alt="" width="300" height="127" /></a></div>
<p>Uno de los problemas que han surgido a raíz de dicha compra es el estado «incierto» que están sufriendo aquellos usuarios de OpenSSO. ¿Ha dejado de ser un proyecto libre? O mejor dicho, ¿ha dejado de ser un proyecto en activo?</p>
<p>Ahora hay que registrarse en Oracle y solicitar una cuenta de cliente con ellos para descargarlo, mientras que los agentes de política (los módulos de openSSO que se instalaban en un servidor web para proteger una zona) han <a href="https://opensso.dev.java.net/public/use/agents.html">desaparecido misteriosamente</a> sin comunicar nada en su página web.</p>
<p>Como muchos de sus usuarios están evaluando alternativas para migrar a otro producto, nosotros queremos proponerles que migren a <a href="http://papi.rediris.es/">PAPI</a>. Gracias a <a href="http://www.prise.es/hg/opensso2papi/">OpenSSO2PAPI</a> podrán migrar a una infraestructura basada en PAPI sin necesidad de cambiar la tecnología que usaban para proteger las aplicaciones.</p>
<p>OpenSSO2PAPI es un software a través del cual PAPI puede ofrecer la API que OpenSSO provee para gestionar la cesión de datos de identidad y atributos a las aplicaciones que estén protegidas con dicha tecnología, implementando el comportamiento y las APIs que dichas aplicaciones esperan.</p>
<p>Podemos dividir la arquitectura de OpenSSO en dos grandes bloques:</p>
<ul>
<li>Páginas de interacción con el usuario, como la pantalla de Login o de Logout para el usuario. Normalmente se encuentra en el directorio /opensso/UI/.</li>
<li>API para consultar servicios web tipo REST y SOAP, encontrándose bajo el directorio /opensso/identity/.</li>
</ul>
<p>Hemos implementado en Opensso2PAPI un conjunto de pantallas y APIs tipo REST y hemos comprobado que funciona perfectamente con aplicaciones protegidas con OpenSSO.</p>
<div style="text-align: center"><a href="http://www.prise.es/blog/wp-content/uploads/2010/05/opensso2papi_arquitectura.png"><img style="float: none" src="http://www.prise.es/blog/wp-content/uploads/2010/05/opensso2papi_arquitectura-300x77.png" alt="" width="300" height="77" /></a></div>
<p>La idea es que OpenSSO2PAPI utiliza un PoA (utilizando phpPoA) para obtener de una infraestructura PAPI, o de un Servidor de autenticación en concreto a través del parámetro PAPIHLI, la identidad del usuario y sus atributos. De esta forma, es como si el OpenSSO delegara en PAPI la gestión de la identidad del usuario.</p>
<p>Cambiando tan sólo las URLs que tenemos definidas en nuestras aplicaciones, la cual hemos protegido con OpenSSO, por la nueva dirección donde está desplegado OpenSSO2PAPI, habremos migrado a PAPI sin necesidad de realizar cambios en dichas aplicaciones con un coste elevado.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/migrando-de-opensso-a-papi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conector PAPI para CAS</title>
		<link>https://www.prise.es/blog/conector-papi-para-cas/</link>
		<comments>https://www.prise.es/blog/conector-papi-para-cas/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 10:35:54 +0000</pubDate>
		<dc:creator><![CDATA[Teresa]]></dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=512</guid>
		<description><![CDATA[Ya está disponible la primera versión del conector PAPI para CAS. Tras un acuerdo con la Valencian International University (VIU), PRiSE ha desarrollado un conector PAPI para CAS, con licencia GPL, para que un CAS pueda actuar como proveedor de identidad dentro de una infraestructura basada en PAPI.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.prise.es/blog/wp-content/uploads/2010/03/casLogo.jpg"><img class="alignleft size-full wp-image-513" src="http://www.prise.es/blog/wp-content/uploads/2010/03/casLogo.jpg" alt="" width="124" height="66" /></a>Ya está disponible la primera versión del conector PAPI para <a href="http://www.jasig.org/cas">CAS</a>. Éste es un sistema para autenticar usuarios en una institución desarrollado inicialmente por la Universidad de Yale y que posteriormente pasó a ser gestionado por la Jasig, un consortium de universidades norteamericanas.</p>
<p>Aunque CAS tiene su propio protocolo, ha sido diseñado de manera que pueda implementar otros protocolos, trayendo ya en la distribución oficial el interfaz de SAML 1.1, su única forma de emitir atributos, u OpenID.</p>
<p>Tras un acuerdo con la <a href="http://www.viu.es/">Valencian International University</a> (VIU), PRiSE ha desarrollado un conector PAPI para CAS, con licencia GPL, para que un CAS pueda actuar como proveedor de identidad dentro de una infraestructura basada en PAPI.</p>
<p>La última versión está disponible en su <a href="https://forja.rediris.es/projects/papi-cas">página en la Forja</a> y el código fuente está disponible en el repositorio de Mercurial <a href="http://www.prise.es/hg/papi-cas">http://www.prise.es/hg/papi-cas</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/conector-papi-para-cas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache y sus log &#8216;escapados&#8217;</title>
		<link>https://www.prise.es/blog/apache-y-sus-log-escapados/</link>
		<comments>https://www.prise.es/blog/apache-y-sus-log-escapados/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 11:08:44 +0000</pubDate>
		<dc:creator><![CDATA[Daniel]]></dc:creator>
				<category><![CDATA[Identidad Digital]]></category>
		<category><![CDATA[PAPI]]></category>

		<guid isPermaLink="false">http://www.prise.es/blog/?p=482</guid>
		<description><![CDATA[Apache, como consecuencia de la vulnerabilidad CVE-2003-0020, escapa todos los logs de errores, con el fin de evitar que un atacante pueda insertar secuencias de caracteres de escape, y provocar vulnerabilidades en emuladores de terminal. Pues bien esto hace que todos los caracteres de control sean impresos en los ficheros de log de errores con su [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Apache, como consecuencia de la vulnerabilidad <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=+CVE-2003-0020" target="_blank">CVE-2003-0020</a>, escapa todos los logs de errores, con el fin de evitar que un atacante pueda insertar secuencias de caracteres de escape, y provocar vulnerabilidades en emuladores de terminal.<br />
Pues bien esto hace que todos los caracteres de control sean impresos en los ficheros de log de errores con su representación visual (i. e. &#8216;\n&#8217;, \t&#8217;, etc), en vez de  actuar como tales. Por lo que depurar mensajes de error generados por cualquier componente externo a Apache, como por ejemplo aplicaciones PHP, scripts-cgi o handles mod_perl, es muy poco agradable, ya que te encuentras con mensajes de error de 10 o 15 líneas condensadas en una sola.</p>
<p>Como en mi día a día tengo que tratar con PAPI (desarrollado en mod_perl2) sufro bastante esta desconsideración de Apache al escribir los mensajes de debug que genera PAPI, vamos que tengo que manejar mensajes de debug de PAPI con el siguiente formato:</p>
<pre>[Thu Mar 11 11:19:52 2010] [debug] ApachePoA.pm(105): [client 130.206.6.37]
 PAPI-DEBUG#20069_1268302792_sirgpoa: Parameters initialized:$VAR1 = bless( {\n
                    'Filtered' =&gt; 1,\n                 'Accept_File' =&gt;
/aaaa/bbbb/cccc/dddd.ddddd/conf/papi/gpoa/shim.gif',\n                 
'String' =&gt; /GPoA',\n                 'attrList' =&gt; [],\n                 'filte
rs' =&gt; [],\n                 'PxCkSize' =&gt; 320768,\n                 ApacheReq
uest' =&gt; bless( do{\\(my $o = 11921096)}, 'Apache2::RequestRec' ),\n    'useHcoo
k' =&gt; 0,\n                 'Type' =&gt; 'Location',\n                 'Hcook_Ha
ndler' =&gt; undef,\n                 'registerKey' =&gt; '',\n                 'MxNonc
eErr' =&gt; 3,\n                 'PoARw' =&gt; [\n                              {\n              
                 'value' =&gt; 'check=false,$1,',\n
</pre>
<p>Lo que como se puede ver es inmanejable. Por esto un día decidí hacer uso de la capacidad que tiene el Apache para enviar los logs a un programa externo que recibirá estos logs por entrada estándar. Siendo en este programa externo donde reemplazo los caracteres de control (i.e. su representación visual) por su valor. Con lo que consigo log de debug de PAPI con el siguiente formato:</p>
<pre>
[Wed Mar 10 15:51:52 2010] [debug] ApachePoA.pm(105): [client 130.206.6.51]
PAPI-DEBUG#29900_1268232712_simplepoa: Parameters initialized:
$VAR1 = bless( {
                 'Filtered' =&gt; 1,
                 'Accept_File' =&gt; '/etc/apache2/papi/global/images/image_ok.png',
                 'String' =&gt; '/simplePoA',
                 'attrList' =&gt; [],
                 'filters' =&gt; [
                                {
                                  'reg' =&gt; '.*',
                                  'act' =&gt; 'accept'
                                }
                              ],
                 'PxCkSize' =&gt; 320768,
                 'ApacheRequest' =&gt; bless( do{\\(my $o = 155158008)},
                                              'Apache2::RequestRec' ),
                 'useHcook' =&gt; '1',
                 'Type' =&gt; 'Location',
                 'registerKey' =&gt; '',
                 'Hcook_Handler' =&gt; '.*',
                 'MxNonceErr' =&gt; 3,
                 'URL_Timeout' =&gt; '600',
                 'PoARw' =&gt; [],
</pre>
<p>Una mejora considerable ¿no?</p>
<p>El truco que hay que hacer consiste en definir el ErrorLog así:</p>
<pre>
ErrorLog "|/usr/local/bin/splitApacheLog.pl /path/papi_error.log /path/error.log"
</pre>
<p>Donde el progrma Perl <tt>splitApacheLog.pl</tt> consiste en:</p>
<pre>
 1 #!/usr/bin/perl
 2 
 3 my $papi = shift @ARGV;
 4 my $error = shift @ARGV;
 5 my $line = '';
 6 #$|=1;
 7 
 8 open(PAPI_OUT,"&gt;&gt;$papi")
 9     or die("No se puede abrir el fichero $papi\n$!\n");
10 open(ERROR_OUT,"&gt;&gt;$error")
11    or die("No se puede abrir el fichero $error\n$!\n");
12 
13 while (defined($line = )){
14     if ($line =~ /PAPI/){
15         $line =~ s/\\n/\n/g;
16         do { 
17             use bytes; 
18             my $size=length($line);
19             syswrite(PAPI_OUT, $line, $size);
20         }
21     }else{
22         $line =~ s/\\n/\n/g;
23         do {
24             use bytes;
25             my $size=length($line);
26             syswrite(ERROR_OUT, $line, $size);
27         }
28     }
29 }
</pre>
<p>Con esto conseguimos dos ficheros de log, uno para PAPI y otro para Apache, como se puede ver discriminamos con la expresión regular de la línea 14 según la cual enviamos la salida al fichero PAPI o al fichero de Apache.<br />
El código es muy simple y intuitivo, por lo que modificarlo para que se ajuste a las necesidades de cualquiera no debe ser muy complicado.</p>
<p>Por último comentar, que se puede compilar Apache sin esta característica tan molesta de los mensajes de log escapados. Para ello sólo debéis hacer uso de la directiva de compilación DAP_UNSAFE_ERROR_LOG_UNESCAPED, tal y como os muestro a continuación:</p>
<pre>
CFLAGS=-DAP_UNSAFE_ERROR_LOG_UNESCAPED ./configure
</pre>
<p>Obviamente no recomiendo esta práctica, sólo informo de ella.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.prise.es/blog/apache-y-sus-log-escapados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
