Buenas,

No hace mucho tiempo estuvimos hablando sobre la posibilidad de  
incluir atributos en la aserción que no fuesen estrictamente atributos  
del usuario, sino atributos relativos al protocolo o incluso a la  
operación concreta de la federación, como por ejemplo, un atributo que  
indique si el usuario ha expresado ya su consentimiento para entregar  
el resto de atributos a un PoA PAPI. Esto es lo que dimos en llamar  
"atributos operacionales".

Pues bien, desde ayer tenemos en el phpPoA2 una primera implementación  
que da soporte a este tipo de atributos. La idea es que como la  
reimplementación del PoA en PHP soporta espacios de nombres en los  
atributos, dependiendo del espacio de nombres se puede pedir al PoA  
que entregue un atributo operacional en lugar de un atributo del  
usuario. De momento, y a falta de confirmación, existen dos espacios  
de nombres autoexplicativos:

urn:mace:rediris.es:papi:protocol
urn:mace:rediris.es:papi:attributes

De esta forma, se le puede solicitar un atributo operacional al  
phpPoA2 con el método getAttribute(), indicando el nombre del atributo  
y el espacio de nombres del protocolo (codificado con la constante  
NS_PAPI_PROTOCOL). De momento he diferenciado los atributos  
operacionales con un prefijo "_papi_" delante del nombre del atributo,  
pero esto puede cambiar. Para pedir el atributo no es necesario  
incluir el prefijo.

Así mismo, se han incluido otra serie de parámetros dentro del espacio  
de nombres de atributos operacionales. Son los siguientes:

- PROTO_ATTR_AS_ID: el identificador del AS que ha autenticado al  
usuario. Se corresponde con el tradicional "@xxxxx" que cierra una  
aserción PAPI.
- PROTO_ATTR_KEY: el identificador de la transacción PAPI por la cual  
se autentica al usuario.
- PROTO_ATTR_EXPIRE_TIME: el tiempo unix en el que caduca la  
autenticación para el usuario actual.

A modo de ejemplo, obtener el identificador del AS que autenticó al  
usuario, es tan sencillo como:

$poa = new PoA("app");
$poa->authenticate();
$id = $poa->getAttribute(PROTO_ATTR_AS_ID, NS_PAPI_PROTOCOL);

Un saludo,

--
Jaime Pérez
Middleware Engineer
RedIRIS National Research and Development Network

pgp: CD22D621
web: http://www.rediris.es
xmpp: [log in para visualizar]
blog: http://blog.rediris.es/middleware