gpt4 book ai didi

c# - 授权和 ASP.NET MVC 缓存

转载 作者:太空狗 更新时间:2023-10-29 21:07:30 29 4
gpt4 key购买 nike

我对 ASP.NET MVC 缓存和授权感到困惑,迫切需要一些说明。

我自制的授权属性继承自AuthorizeAttribute。它被覆盖的 AuthorizeCore 方法每次都会运行,即使我在 Controller 操作上设置了 [OutputCache] 属性。我明白那部分。

现在让我费解的是:AuthorizeCore 每次都失败 当我实际执行输出缓存并且页面从缓存中提供时。原因是当请求被缓存时,AuthorizeCore提供的httpContext.Sessionnull!?这是一些简化的代码:

protected override bool AuthorizeCore(HttpContextBase httpContext) {
return (Session["userId"] != null)
}

因此,如果 httpContext.Sessionnull,这显然每次都会失败。虽然我需要访问 session ,但我还能如何检查请求是否被授权?这没有任何意义 - 如果它应该是这样,那么我将永远能够在 ASP.NET MVC 中将缓存页面与身份验证一起使用。帮忙?

最佳答案

有两个不同的问题:

  1. 身份验证是否与 MVC 中的缓存一起使用?
  2. Session 是否在面对缓存的身份验证之前工作(即使对于未经身份验证的用户,他们仍然希望拥有唯一的 session )?

答案分别为是和否。身份验证适用于缓存。尝试使用 SQL 或域成员资格提供程序;你会看到的。

然而,缓存可以在身份验证模块之前运行。 (为了加分:为什么?)只有当它专门 Hook 缓存时才会调用身份验证(如 AuthorizeAttribute 所做的那样)。因为 session 是特定于用户的,所以保证您将在 AuthorizeCore 中拥有一个 session 。

更多奖励积分:如果您在缓存配置中指定 varyByUser,这会发生什么变化?

不幸的是,正确地进行身份验证是困难的,因为进行任何类型的安全权都是困难的。 Microsoft 试图通过成员资格提供者 API 使这更容易。 I strongly recommend using that实现自定义身份验证时。我还建议使用内置提供程序并扩展它们,而不是尽可能重写它们。

还有一点:ASP.NET session 提供程序和 ASP.NET 成员身份提供程序完全是分开的。不同的成员(member)用户可以共享(!)一个 session ,并且,yes , 你可以 attack这样的网站。将与安全相关的信息放入 session 中永远是不安全的。安全很难。

关于c# - 授权和 ASP.NET MVC 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1441799/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com