【问题标题】:ASP.NET MVC 3 - Authorization of Windows users is slow, can we speed it up?ASP.NET MVC 3 - Windows 用户的授权很慢,我们可以加快速度吗?
【发布时间】:2012-07-25 14:07:41
【问题描述】:

我们的 ASP.NET MVC 3 Intranet 应用程序使用 Windows 用户身份验证,并且还要求用户具有特定角色才能访问管理部分(授权)。虽然所有这些都有效,但我们发现检查用户的角色成员身份确实很慢(约 20 秒)。我们使用User.IsInRole 方法或AuthorizeAttribute。即使我们检查本地管理员组('BUILTIN\Administrators')而不是 AD 组,它仍然很慢。

现在,为了加快用户授权,我们可以遵循一些推荐的方案吗?例如在数据库中缓存用户的授权状态是否常见?从根本上说,由于对本地组(“管理员”)授权这么慢,是否有什么可疑的地方?

编辑:

Web 服务器在 Windows 2008 R2 SP1 x64、.NET 4.0、IIS 7.5、4 GB RAM 上运行。但是,我在我的开发机器上对用户角色成员身份进行了相同的延迟查询,因此看起来问题与运行应用程序的机器无关。我认为 DBMS 应该无关紧要,因为时间花在查询用户是否是“BUILTIN\Administrators”的成员(为了简化问题,我只是检查这个本地组)。

【问题讨论】:

  • 总是这样吗?慢?
  • @Pabloker 实际上,我不记得了。不久前我们引入了授权位,当它第一次开始变慢时,我认为这是由于托管服务器的虚拟机造成的。多亏今天安装了 MiniProfiler,我才意识到它有多慢以及为什么。
  • 好的。你能把你的系统配置? DBMS、服务器操作系统、IIS 等?
  • 您是使用自己的 MembershipProvider 和 RoleProvider 还是使用框架提供的?
  • @StefanBossbaly 我们将System.Web.Security.WindowsTokenRoleProvider 用于Web.config 中的roleManager 元素,我假设这是RoleProvider?

标签: asp.net-mvc asp.net-mvc-3 authorization windows-authentication


【解决方案1】:

在后台,ASP.NET MVC Windows 用户身份验证与 Web 窗体所做的事情相同。我不知道将框架 MembershipProvider 和 RoleProvider 与 Web 表单或 MVC 一起使用时会出现任何性能问题。为了调试它,我将创建最简单的 Web 窗体(和 MVC)项目,并找出所有时间都花在了哪里。可能是您的 AD 服务器速度较慢,或者第一次身份验证尝试超时。

【讨论】:

  • 我们已经为 Web.config 中的 roleManager 元素配置了 System.Web.Security.WindowsTokenRoleProvider。时间花在检查角色成员资格上,例如通过调用User.IsInRole(@"BUILTIN\Administrators")。我不知道如何进一步深入研究,因为User 对象属于标准库类System.Web.Security.RolePrincipal
  • @aknuds1 不确定这是否会给你更多,但你可以;启用 .net 框架源步进...
  • @ChrisMoutray 谢谢,不知道这个选项!
  • @ChrisMoutray 出于某种原因,相关方法 (User.IsInRole) 的源不可用,请参阅stackoverflow.com/questions/11684358/…
  • @aknuds1 您可以尝试反射器(或免费替代品)并挑选代码以查看它在做什么,但再次不确定这是否会给您更多...
猜你喜欢
  • 2019-06-28
  • 2011-01-17
  • 2015-08-30
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2019-11-03
相关资源
最近更新 更多