Atributos operacionales en PAPI/SIR con el phpPoA2
No hace mucho tiempo, en el equipo del SIR 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);