Demasiadas cookies de OpenID.nonce causan "Solicitud incorrecta"

Ya he pasado por enlacesaquí, aquí yaquí que están relacionados con el problema que estoy teniendo.

Tengo la aplicación Silverlight que usa IdentiServer3 para la autenticación y comencé a tener este problema justo ahora cuando implementé la funcionalidad de cierre de sesión. Tenga en cuenta que el problema no tiene nada que ver con Silverlight porque la funcionalidad de inicio y cierre de sesión se implementa realmente en el lado del servidor, que es un formulario web clásico de ASP.Net. (.NET 4.5.1)

La aplicación nunca tuvo la funcionalidad de cierre de sesión, por lo que el usuario solo solía cerrar el navegador para que nunca antes nos encontráramos con este problema. Ahora tenemos la página logout.aspx y la aplicación Silverlight tienen un enlace a esta página.

Página Logout.aspx

public partial class Logout : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.IsAuthenticated)
        {
            Session.Clear();
            Request.GetOwinContext().Authentication.SignOut();
        }
        Response.Redirect("/");
    }
}

Página predeterminada.aspx. Esta es la página de inicio

public partial class Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Send an OpenID Connect sign-in request.
        if (!System.Web.HttpContext.Current.Request.IsAuthenticated)
        {
            HttpContext.Current.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
        }
    }
} 

Clase de inicio OWIN donde se configura la conexión OpenID

  app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies",
            LoginPath = new Microsoft.Owin.PathString("/Default.aspx")
        });

  app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            Authority = ConfigurationManager.AppSettings["Authority"],
            Scope = "openid profile",
            ClientId = ConfigurationManager.AppSettings["ClientId"],
            RedirectUri = ConfigurationManager.AppSettings["RedirectUri"],
            ResponseType = "id_token",
            SignInAsAuthenticationType = "Cookies",

            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                SecurityTokenValidated = (context) =>
                {

                    var id = context.AuthenticationTicket.Identity;

                    // create new identity
                    var newIdentity = new ClaimsIdentity(id.AuthenticationType);

                    // we want to keep username and subjectid                        
                    var sub = id.FindFirst(ClaimTypes.NameIdentifier);
                    var username = id.FindFirst("preferred_username");
                    newIdentity.AddClaim(username);
                    newIdentity.AddClaim(sub);

                    // keep the id_token for logout
                    newIdentity.AddClaim(new Claim("id_token", context.ProtocolMessage.IdToken));

                    context.AuthenticationTicket = new AuthenticationTicket(
                        newIdentity,
                        context.AuthenticationTicket.Properties);

                    return Task.FromResult(0);
                },

                RedirectToIdentityProvider = (context) =>
                {
                    if (context.ProtocolMessage.RequestType == OpenIdConnectRequestType.LogoutRequest)
                    {
                        var idTokenHint = context.OwinContext.Authentication.User.FindFirst("id_token").Value;
                        context.ProtocolMessage.IdTokenHint = idTokenHint;
                    }
                    return Task.FromResult(0);
                },                    
            }

Pasos para reproducir el problema:

Escribo la URL del sitio web que me redirige a la página de inicio de sesión de identityserver3.Ingreso credenciales y presiono iniciar sesión.Después de iniciar sesión con éxito, me redirigen al sitio web y allí hago clic en cerrar sesión.

Me desconecté con éxito. Fiddler muestra las siguientes llamadas

https://idsvr.mydomain.com/identity/connect/endsession?id_token_hint=XXXXXXXXXXXXXX https://idsvr.mydomain.com/identity/logout?id=616dd9a4e4c6a55b0bb27faceb4df8dd https://idsvr.mydomain.com/identity/connect/endsessioncallback?sid=xxxxxx

Aterrizo enhttps://idsvr.mydomain.com/identity/logout?id=xxxxxxx página como se esperaba.

Ahora cierro el navegador (este paso es importante)Ahora escriba nuevamente la URL del sitio web que me redirige a la página de inicio de sesión del servidor de identidad. (como el paso 1)Ingreso credenciales y presiono iniciar sesión.Después de un inicio de sesión exitoso, IdentityServer realiza POST en el sitio web y el sitio web crea AuthenticationTicket. Sin embargo, aquíHttpContext.Current.Request.IsAuthenticated es falso entoncesDefault.aspx la página redirige a IdentityServer. Ya he iniciado sesión, por lo que Indetityserver redirige al sitio web del cliente y los bucles continúan.

Fiddler muestra varios viajes de ida y vuelta desde identityServer a la página default.aspx del sitio web. Cada viaje de ida y vuelta sigue agregandoOpenIdConnect.nonce.OpenIdConnect cookie y finalmente recibo un error de solicitud incorrecta debido al tamaño máximo de la solicitud.

Entonces, como se sugiere en los enlaces anteriores, degradéMicrosoft.Owin.Security.OpenIdConnect a3.0.0 en la aplicación del cliente.

Sin embargo, todavía me quedo atrapado en un bucle continuo. La única diferencia es que ahora no agrega nuevosOpenIdConnect.nonce.OpenIdConnect galleta para cada viaje de ida y vuelta. Fiddler muestra solo una cookie por cada viaje de ida y vuelta. sin embargoHttpContext.Current.Request.IsAuthenticated Sigue siendo falso. Entonces me atasco en un bucle continuo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta