Cómo configurar el tiempo de espera correctamente cuando se federa con ADFS 2.0

Estoy usando ADFS 2.0 durante bastante tiempo y entiendo cómo funcionan las cosas. He hecho una docena de RP personalizados, STS personalizados y he usado el ADFS como el STS de confianza.

in embargo, tengo un requisito simple que aún no cumplo.

Quiero que mis usuarios se vean obligados a relogin después de un tiempo fijo. Digamos 1 minuto, para fines de prueba.

Primero, he hecho algunas correcciones en el lado de los RP. Parece que por razones desconocidas, el RP retiene la sesión incluso si el token esvalidTo puntos atrás en el tiempo. Esto contradice lo que Vittorio Bertocci dice en su libro (página 123) donde muestra cómo realizar una caducidad deslizante: dice que "El Módulo de Autenticación de Sesión se encargará de manejar la sesión caducada justo después". Bueno, para mí no, sin embargo, he encontrado un truco aquíhttp: //blogs.planbsoftware.co.nz/? p = 521 - mira la cláusula "if":

        sam.SessionSecurityTokenReceived +=
            ( s, e ) =>
            {
                SessionAuthenticationModule _sam = s as SessionAuthenticationModule;

                DateTime now = DateTime.UtcNow;

                DateTime validFrom = e.SessionToken.ValidFrom;
                DateTime validTo   = e.SessionToken.ValidTo;

                try
                {
                    double halfSpan = ( validTo - validFrom ).TotalSeconds / 2;
                    if ( validTo < now )
                    {
                        _sam.DeleteSessionTokenCookie();
                        e.Cancel = true;
                    }
                }
                catch ( Exception ex )
                {
                    int v = 0;
                }
            };

Este truco soluciona el problema en el lado de los RP. Cuando el token no es válido, la aplicación lo borra y lo redirige a la página de inicio de sesión.

Ahora viene el problema. Mi página de inicio de sesión utiliza laFederatedPassiveSignIn control. Cuando se hace clic, redirige el navegador al ADFS.

Pero ADFS felizmente crea unanueva sesió sin ningún aviso para el usuario.

He establecido la vida útil del token para este RP en 1:

Set-ADFSRelyingPartyTrust -Targetname "myrpname" -TokenLifetime 1

y usandoGet-ADFSRelyingPartyTrust Puedo ver que está configurado en 1 (incluso imprimo el tokenvalidTo en mi página para confirmar que esto está configurado correctamente).

Luego configuro las propiedades de ADFS conADFS-SetProperties:

ADFS-SetProperties -SsoLifetime 1
ADFS-SetProperties -ReplyCacheExpirationInterval 1
ADFS-SetProperties -SamlMessageDeliveryWindow 1

pero aún no hay suerte. Estoy atrapado ahora.

El escenario funciona correctamente con mi STS personalizado donde la validez de la sesión de STS se basa en una cookie de formularios: si configuro el tiempo de espera de la cookie de formularios del STS en 1, después de 1 minuto de inactividad dentro de mi aplicación de RP me redirigen a la página de inicio de sesión de mi RP que luego redirige al STS que presenta su página de inicio de sesión.

Sin embargo, este no es el caso con ADFS 2.0. Después de un minuto de inactividad, soy redirigido a la página de inicio de sesión de mi RP que redirige a la página de inicio de sesión de ADFS que a su vez vuelve a dirigir felizmente, al igual que la sesión todavía estaría activa en ADF

Me gustaría que alguien:

(1) eche un vistazo al truco descrito en la parte superior y explique por qué un token caducado no se rechaza automáticamente y se necesita un truco tan feo

(2) explique cómo expirar correctamente la sesión en el lado de ADFS 2.0 para que la solicitud de renovar el token se guarde con una página de inicio de sesión.

Gracias por adelantado

edita

Puedo confirmar que establecer todos los parámetros anteriores en 1 minuto invalida la sesión ADFS después de 5 minutos (o más). Eso es extraño y parece que o estoy cometiendo un error básico o 5 minutos es el valor mínimo aceptable.

Mi (2) desde arriba ahora es solo para confirmar y explicar mi observación.

Respuestas a la pregunta(6)

Su respuesta a la pregunta