tutorial net mvc example asp cookies asp.net-mvc-5 wif asp.net-identity owin

net - Cómo mantener los reclamos de cookies actualizados con MCV5/OWIN



mvc 5 user identity (3)

No, esto es en esencia lo que tendrías que hacer si tienes el requisito de que la cookie esté al 100% actualizada en todo momento.

La clase de opciones de middleware de la cookie Katana tiene una retrollamada OnValidateIdentity cada vez que se presenta la cookie: puede verificar allí y luego volver a emitir la cookie. Así es como funcionan los bits ASP.NET Identity 2.0 para caducar una cookie si se cambió la contraseña de un usuario desde que se emitió la cookie.

Estamos trabajando en un proyecto OWIN MVC5. Usamos una implementación propia de IUserStore<T> para integrar la administración de usuarios que es parte del marco de nuestras compañías. Hasta ahora, esto funciona bien. Queremos proporcionar membresía de roles y otra configuración de seguridad mediante reclamos. He visto (y probado rápidamente) las formas de implementar IUserClaimStore<T> o de adjuntar un ClaimsIdentityFactory al UserManager.

En ambos escenarios, veo el problema de que los reclamos se almacenan en la cookie del usuario y cuando un rol u otro reclamo cambia detrás de la aplicación web (a través de otra aplicación que accede directamente al almacenamiento de la administración de usuarios), la cookie del usuario contiene el antiguo reclamaciones y el usuario tiene demasiados o muy pocos permisos de los que debería tener.

Una posibilidad que me vino a la mente es verificar cada solicitud o solicitud en algún intervalo de tiempo, si la configuración de back-end de las reclamaciones de los usuarios ha cambiado y, en caso afirmativo, actualizar la cookie de los usuarios.

¿Es este el enfoque correcto o MVC5 / Owin ofrece una manera más elegante / eficiente de cumplir con este requisito? Si es el enfoque correcto y único, ¿dónde sería el lugar más eficiente para verificar y actualizar la información de las cookies?


Agregamos esta característica a 2.0, así es como configuraría CookieMiddleware para obtener reclamos nuevos cada 30 minutos (regenerateIdentity debe llamar al código que usa para generar el ClaimsIdentity para los usuarios cuando inician sesión, y validateInterval controla la frecuencia con la que se llama a regenerateIdentity , pero solo si la cookie antigua sigue siendo válida)

app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), Provider = new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) } });


Otra opción podría ser utilizar SignalR en un diseño en el que los navegadores de usuario conectados se dirigen a readquirir la cookie a través de una llamada Ajax.