如何在Asp中分离大的cookie.Net Identity变成一个更小的,允许许多索赔



我正在为我们的MVC应用程序开发一个基于声明的授权原型。我们使用Asp。用于身份验证的网络标识。

我们希望每个控制器动作都有一个声明,然后给/拿走用户的声明,这样我们就可以很好地控制谁可以去哪里。

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

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

600索赔不是我们应用程序的限制,我们可能需要更多。

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

注。如果你很好奇,这里是我的声明"分析器"的代码以及项目的其余部分。

最大功率。我知道大型cookie对性能的影响。现在不用担心。

Update目前我的答案没有开箱即用的解决方案。但看起来我不是唯一一个有这个问题的人。Microsoft.Owin正在处理auth-cookie。以及Owin的当前源代码。cookie有ChunkingCookieManager,它在CookieAuthenticationMiddleware中默认分配。

坏消息是这个代码非常新鲜(在2014年7月10日检入,只有20天)。它可以通过nuget microsoft . win. security . cookies的预发布版本获得。我不确定我是否想在生产站点中使用RC2。

还有别的办法吗?

您错误地使用了声明。声明表示用户的身份,而不是允许他们执行的操作。您正在遇到问题,因为您将索赔视为用户权限的房子。你真的应该在你的应用程序中找到一种方法把这两者分开。

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

参见下面的相关问题。

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

请求特定资源的授权

我还没有解决这个直接问题。Cookie太大,并且随着数量或请求的增加,它将保持较大。Owin v3.0(目前在RC2中,还没有生产就绪)有一种方法可以将cookie分成更小的cookie。但是大的饼干是不好的。所以我只在服务器端保存声明。

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

解决方案的核心是在Startup例程中,并且有一个MVC过滤器,用于检查所需的声明是否可供用户使用。

应该使用Role

<>之前[授权(角色= "Admin, Role1")]public ActionResult Index(string id){…}[授权(角色= "Admin, Role2")]public ActionResult Index2(string id){…}[授权(角色= "Admin, Role1, Role3")]public ActionResult Index3(string id){…}

相关内容

  • 没有找到相关文章

最新更新