Modificar el tiempo de vida del token proporcionado por Windows Azure AppFabric Access Control


Cuando nuestras aplicaciones trabajan con Access Control, el mismo nos facilita un token que nos permite mantener la autenticación vigente durante el trascurso de nuestro paso por la aplicación. Sin embargo, al cabo de 10 minutos este token dejará de ser válido, solicitando un nuevo token al servicio de forma casi «transparente» para el usuario: Cuando se realice una nueva petición y nuestro token haya caducado, la aplicación se redirigirá nuevamente a nuestro servicio de Access Control utilizando el usuario y la contraseña que utilizamos en nuestro login, validando nuestras credenciales y obteniendo un nuevo token para los próximos 10 minutos.

El «problema» surge cuando tenemos una aplicación con ciertas consultas asíncronas que no utilizan el refresco total de la página y no son capaces de redirigirnos a Access Control para revalidar nuestras credenciales. En mi caso es bastante molesto que el usuario sólo tenga 10 minutos hasta la próxima comprobación por lo que voy a mostrar en este post como aumentar este tiempo de vida de nuestro token 😀

Dentro de la administración de Access Control, accedemos al apartado Relaying Party applications.

Seleccionamos la aplicación que queremos modificar y nos posicionamos en el apartado Token lifetime (secs)

Este campo tiene que tener siempre un valor mayor a cero pero menor o igual a 24 horas. Como 10 minutos me parece escaso y 24 horas me parece una salvajada 😀 voy a modificar el mismo para que tenga una validez de media hora, o lo que es lo mismo 1800 segundos.

Por otro lado, si queremos que nuestra aplicación valide nuestras credenciales en el tiempo estimado podemos comprobar lo siguiente: En mi caso, utilizando JQuery me he dado cuenta de siempre recibo el mismo código de error en este supuesto, utilizando en mi llamada $.ajax el método error para capturarlo:

error: function (msg) {
    alert(msg.status); //code error: 12017
}

Sabiendo esto podemos determinar que nuestro token ha expirado y es necesario refrescar la página para recuperar un nuevo token. Para ello bastaría con lo siguiente:

error: function (msg) {
     switch (msg.status) {
          case 12017:
              location.reload();
          default:
                 alert(msg.status);
     }
}

De esta forma nos aseguramos que el token ha sido revalidado y que las actualizaciones a través de AJAX sigan funcionando sin problemas 😀

¡Saludos!