【发布时间】: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