使用IIS 7.5温升模块与ASP.NET MVC的AuthorizeAttribute

4
我在我的ASP.NET MVC应用程序中创建了一个控制器来处理应用程序的预热/初始化(即加载Web服务客户端代理和其他最初需要大量时间的操作)。为了调用WarmUp控制器,我正在使用IIS 7/7.5预热模块,在应用程序池启动时发送请求。
我不希望所有用户都能执行WarmUp控制器操作,因此我使用[Authorize]属性对控制器进行了标记。我甚至在我的域中创建了一个包含应该允许执行预热操作的用户的组,并将此组添加为授权属性的角色(即[Authorize(Roles = @"MyDomain\AppWarmUp")])。
如果我使用Web浏览器手动调用WarmUp控制器并提供正确的凭据,则一切正常。但是,当使用IIS预热模块时,即使我提供正确的凭据,我也会在应用程序事件日志中看到身份验证失败的警告。
如果我仅为预热模块的用户上下文指定类型和用户名,则会出现ProviderException,其中包含以下消息:

Method is only supported if the user name parameter matches the user name in the current Windows Identity.

如果我同时指定用户名和密码/令牌,则会出现ArgumentException,其中包含以下消息:

Invalid token for impersonation - it cannot be duplicated.

如果我从控制器中删除[Authorize]属性,则预热模块的请求将通过而没有任何异常。但是,如果可能的话,我希望避免所有用户都可以访问WarmUp控制器的情况。这可能是预热模块中的错误还是我漏掉了什么?
值得注意的是,我还尝试了ASP.NET 4.0应用程序自动启动功能,但似乎没有像实际请求应用程序那样产生相同的效果。还有其他要考虑的替代方案吗?
1个回答

1

问题可能是由于在IIS中执行WarmUp请求的用户帐户引起的。请确保您更改应用程序池的高级设置下的标识设置以及IIS中网站的高级设置下的物理路径凭据。我记不清哪个会起作用,所以请尝试其中一个或两个。

当您从浏览器手动进行请求时,您正在模拟该帐户。当IIS通过WarmUp模块进行请求时,它将使用上述帐户之一。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接