我们正试图在项目中使用基本身份验证,它通常在我们的集成和QA环境中运行良好,甚至可以在IIS 7.5的本地运行。但是在IIS Express中本地运行时,我们会遇到一些非常奇怪的问题——任何静态请求都会导致神秘的HTTP 500错误,告诉我们访问该资源时出错,可能是由于一些与权限相关的原因,错误代码为0x80070542。同时,在ASP.NET中呈现的任何内容都是完美的。
游标搜索表明,问题通常源于IIS的帐户无法访问这些资源。这已经用完了,IUSER肯定可以访问资源——事实上,完全相同的文件夹在IIS 7.5中运行得很好;仅IIS Express barfs。只有当我们启用基本身份验证时——如果我们启用windows身份验证,所有请求都会完美通过。
我们最后尝试运行sysinternals procmon,试图弄清楚我们是否看到了正确的用户,以及是否是其他原因导致了故障,我们发现由于BAD IMPERSONATION导致了故障。但试图弄清楚是谁在冒充什么却徒劳无功。从我们可以看出,IUSER/NETWORK SERVICE/默认帐户确实具有适当的访问级别,前提是在生产模式下可以使用IIS,并且任何类型的访问测试都通过。运行IIS express的帐户都是本地管理员,应该有权进行模拟。在本地安全策略中手动添加该权限没有任何区别。我只是找不到一种方法来解决这个问题,那就是明确定义一个模拟用户,而我真的不需要这样做
那么,有没有一种正确的方法可以让IIS Express处理基本的身份验证和静态请求呢?
IIS Express以当前登录用户身份运行,不进行模拟。可能只是为了测试,您可以尝试将当前登录的用户帐户添加到IIS IUser组中,看看这是否有用。
我终于得到了权威人士的最新消息,在IIS Express 8中,基本身份验证中的某些深层问题被破坏了,这是一个已知的错误,在该版本中不会解决,但可能会在未来的版本中解决。
我们已经有了开发配置,所以我们只是使用windows auth进行本地开发,因为这不会改变我们的应用程序的任何内容,而且我们已经有独立的开发配置,但这可能不适用于所有情况。