授权和ASP.NETMVC缓存我对ASP.NETMVC缓存和授权感到困惑,迫切需要一些说明。我自制的授权属性继承自AuthorizeAttribute。即使我在控制器操作上设置了[OutputCache]属性,它每次都会运行其覆盖的AuthorizeCore方法。我明白了。现在它让我发疯:当我实际进行输出缓存并且页面从缓存中提供时,AuthorizeCore每次都会失败。原因是httpContext.Session提供的httpContext.Session在缓存请求的时候为null!下面是一些简化的代码:protectedoverrideboolAuthorizeCore(HttpContextBasehttpContext){return(Session["userId"]!=null)}因此,如果httpContext.Session为null,则每次都会失败。我需要访问会话,如何检查请求是否被授权?这没有任何意义——如果它应该如此,那么我将永远无法在ASP.NETMVC中使用缓存页面和身份验证。帮助?有两个不同的问题:身份验证是否适用于MVC中的缓存?Session是否在面向缓存的身份验证之前起作用(即使对于未经身份验证的用户,他们仍然希望拥有唯一的会话)?答案是肯定的和否定的。身份验证与缓存一起使用。尝试使用SQL或域成员提供程序;你会看到的。但是,缓存可以在身份验证模块之前运行。(为了加分:为什么?)只有在缓存被特别挂钩时才会调用身份验证(如AuthorizeAttribute所做的那样)。由于会话是特定于用户的,因此无法保证您在AuthorizeCore中有一个会话。更多奖励积分:如果您在缓存配置中指定varyByUser,这会发生什么变化?不幸的是,获得正确的身份验证是困难的,因为做任何类型的安全权利都是困难的。Microsoft试图通过MembershipProviderAPI使这更容易。我强烈建议在实现自定义身份验证时使用它。我还建议使用内置提供程序并扩展它们,而不是在可能的情况下重写它们。还有一点:ASP.NET会话提供程序和ASP.NET成员资格提供程序是完全独立的。具有不同会员资格的用户可以共享(!)会话,是的,您可以通过这种方式攻击网站。将与安全相关的信息放在会话中是不安全的。安全很难。以上就是《C#学习教程:授权与ASP.NETMVC缓存共享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
