Cómo separar el gran cookies en Asp.Net Identidad en los más pequeños para permitir que MUCHOS de los reclamos?

StackOverflow https://stackoverflow.com//questions/25025979

Pregunta

Estoy trabajando en un prototipo de una basada en solicitudes de autorización para nuestra aplicación MVC.Utilizamos Asp.Net Identidad para la autenticación.

Nos gustaría tener una reclamación por cada acción del controlador y, a continuación, dar/tomar distancia de los usuarios afirma así tenemos una muy fino control sobre quién puede ir a donde.

Nuestra aplicación ya tiene más de 800 acciones y sigue creciendo.He hecho una pequeña aplicación de prueba para ver cómo este número de reclamaciones puede ser manejado.Y topamos con un problema: las cookies son limitados a 4092 bytes.

Y tener un gran número de reclamaciones, aumenta la Autenticación de la Identidad de la galleta.Alrededor de 600 reclamaciones con nombres cortos y/o valores (5 caracteres cada uno) me dan cookie tamaño de más de 4 KB y el usuario, con este número de reclamaciones no puede iniciar sesión, la cookie no se puede establecer en un navegador.

Y 600 reclamaciones no es un límite para nuestra aplicación.Probablemente vamos a necesitar más que eso.

Es allí una manera de separar el auth-cookie en un par de pequeños cookies?

p.s.Si tienes curiosidad, aquí está mi código de reclamaciones "profiler" junto con el resto del proyecto.

p.p.s.Yo sé acerca de las implicaciones de la ejecución de la ampliación de las cookies.No se preocupe acerca de él justo ahora.

Actualización Actualmente no existe fuera de la solución a mi respuesta.Pero parece que no soy el único con este problema. Microsoft.Owin es el manejo de la auth-cookie.Y de código fuente actual para Owin.Las Cookies se ha ChunkingCookieManager que se asigna por defecto en CookieAuthenticationMiddleware.

Mala noticia de que este código es muy fresco (se comprueba en el 10 de julio de 2014, a sólo 20 días de edad).Está disponible a través de pre-lanzamiento de nuget Microsoft.Owin.De seguridad.Las Cookies.No seguro de que me gustaría usar RC2 en el sitio de producción.

De otra manera?

¿Fue útil?

Solución 2

No he resuelto la pregunta directa.La cookie es demasiado grande y seguirá siendo grande si hay un gran número de reclamaciones.Owin v3.0 (actualmente en RC2, no listo para producción) tiene una manera de dividir las cookies en otras más pequeñas.Pero las galletas grandes son simplemente malas.Así que mantengo los reclamos solo del lado del servidor.

Tuve un discusión en el foro de identidad y encontrado este Pregunta que aborda mis preguntas por completo.Basándome en la pregunta, hice mi propia solución y creé un prototipo de una pequeña aplicación MVC: https://github.com/trailmax/ClaimsAuthorisation.

El núcleo de la solución está en Rutina de inicio y hay un filtro MVC que verifica si los reclamos requeridos están disponibles para el usuario.

Otros consejos

Utiliza las reclamaciones de forma incorrecta.Reclamaciones de representar la identidad del usuario, no las acciones que pueden realizar.Se están ejecutando en problemas porque usted está tratando de reclamaciones como una casa para los permisos de usuario.Usted realmente debe encontrar una manera de separar los dos en su aplicación.

En el MVC de la moda, esta sería la creación de una costumbre autorizar atributo, consiguiendo la identidad del usuario a partir de la reivindicación de la cookie, y la verificación de la identidad del usuario, puede ejecutar una acción.

Ver preguntas relacionadas a continuación.

Restringir el acceso a los registros.Es la reivindicación de los permisos basados en una buena idea

Reclamaciones de autorización de recursos específicos

Deberías usar Rol

[Authorize(Roles = "Admin, Role1")]
  public ActionResult Index(string id)
{....}
[Authorize(Roles = "Admin, Role2")]
  public ActionResult Index2(string id)
{....}
[Authorize(Roles = "Admin, Role1, Role3")]
  public ActionResult Index3(string id)
{....}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top