如何将Asp.Net Identity中的大型cookie分成较小的cookie以允许多个声明?

tra*_*max 6 cookies asp.net-mvc claims owin asp.net-identity

我正在为我们的MVC应用程序开发基于声明的授权原型.我们使用Asp.Net Identity进行身份验证.

我们希望对每个控制器操作提出索赔,然后给予/取消用户的索赔,这样我们就可以很好地控制谁可以去哪里.

我们的应用程序已有800多个动作并且不断增长.我做了一个小测试应用程序,看看如何处理这些索赔.并遇到一个问题:cookie限制为4092字节.

并且拥有大量声明会增加身份验证Cookie.大约600个具有短名称/值(每个5个字符)的声明为我提供了大小超过4K的cookie,并且具有此数量的声明的用户无法登录 - 无法在浏览器中设置cookie.

600个声明不是我们的应用程序的限制.我们可能还需要更多.

有没有办法将auth-cookie分成几个较小的cookie?

ps如果你很好奇,这里是我的代码"profiler"以及项目其余部分.

pps我知道大型cookie的性能影响.现在不用担心.

更新目前我的答案没有开箱即用的解决方案.但看起来我不是唯一有这个问题的人.Microsoft.Owin正在处理auth-cookie.目前Owin.Cookies的源代码具有ChunkingCookieManager,默认情况下在CookieAuthenticationMiddleware中分配.

这段代码非常新鲜的坏消息(已于2014年7月10日签入,仅20天).它可以通过预先发布的nuget Microsoft.Owin.Security.Cookies获得.不确定我是否想在生产现场使用RC2.

还有其他方法吗?

Sho*_*hoe 6

您使用的声明不正确.声明代表用户的身份,而不是允许他们执行的操作.您遇到了问题,因为您将声明视为用户权限的房屋.你真的应该找到一种方法来分离你的应用程序中的两个.

在MVC方式中,这将创建自定义授权属性,从声明cookie获取用户的身份,并验证用户的身份可以执行某些操作.

请参阅以下相关问题.

限制对记录的访问.基于声明的权限是一个好主意

对特定资源的声明授权


tra*_*max 2

我还没有解决直接问题。Cookie 太大,并且会随着大量或索赔而保持很大。Owin v3.0(目前处于 RC2 阶段,尚未准备好生产)有一种将 cookie 分成更小的块的方法。但大饼干就不好了。所以我只在服务器端保留声明。

在身份论坛上进行了讨论,发现这个问题完全解决了我的问题。根据这个问题,我完成了自己的解决方案并制作了一个小型 MVC 应用程序原型: https: //github.com/trailmax/ClaimsAuthorization

该解决方案的核心位于启动例程中,并且有一个MVC 过滤器来检查用户是否可以使用所需的声明。


归档时间:

查看次数:

2944 次

最近记录:

11 年,3 月 前